2011-03-22 105 views
3

示例代碼添加多個項目到一個PHP數組中的foreach循環 - 有沒有更好的辦法?

<?php 
    $items = array(
     array(
      'forename' => 'Foo', 
      'surname' => 'Bar' 
     ), 
      array(
      'forename' => 'Bar', 
      'surname' => 'Foo' 
     ) 
    ); 

    $arr = array(); 
    $i = 0; 

    foreach($items as $item){ 
     $arr[$i]['name'] = $item['forename']; 
     $arr[$i]['surname'] = $item['surname']; 
     $i++; 
    } 

    echo "<pre>".print_r($arr, true)."</pre>"; 
?> 

結果

Array 
(
    [0] => Array 
     (
      [name] => Foo 
      [surname] => Bar 
     ) 

    [1] => Array 
     (
      [name] => Bar 
      [surname] => Foo 
     ) 
) 

結果是完全可以接受的和代碼是可讀的。
我的問題是:有沒有更好/更高效/更漂亮的方式做到這一點?

回答

3

沒有,你可以做這些代碼的巨量,你可以擺脫的需要必須使用foreach($items as $key => $value)和使用$key代替$i增量變量($i)。

+0

這就是答案我一直在尋找的那種。 – Sam 2011-03-22 16:18:38

+0

你,如果你使用'$ ARR [] = $項目...'語法甚至不需要一個變量'$ i'。 – Matthew 2011-03-22 16:21:14

+1

當我向一個數組添加多個項目時,我需要一個共享密鑰。使用指定的方法會給我爲$ ARR – Sam 2011-03-22 16:35:03

0

通常,您可以使用類似array_merge(),但因爲要重命名的鍵沒有什麼直接的。你可以這樣做:

$keys = array('forename' => 'name', 'surname' => 'surname'); 

,然後在當前foreach迴路有第二foreach循環,遍歷這一點。但是對我來說,除非你多次做同樣的事情,否則沒有比這更好的了。

其實,array_combine()也許會有幫助,但你必須要小心,要保持排序:

$arr[] = array_combine(array('name', 'surname'), $item); 

注意:您可能需要使用array_values($item),我不知道。

1

這是很好,確實沒有更好的辦法來做到這一點。這裏是一個可以說是或多或少可讀的一種替代方案:

$items = array(
    array(
     'forename' => 'Foo', 
     'surname' => 'Bar' 
    ), 
     array(
     'forename' => 'Bar', 
     'surname' => 'Foo' 
    ) 
); 

foreach ($items as &$item) { 
    $item['name'] = $item['forename']; 
    unset($item['forename']); 
} 

注意,這將會把name關鍵surname後,如果該事項。

0

您可以使用以下方式

<?php 
    $items = array(
     array(
      'forename' => 'Foo', 
      'surname' => 'Bar' 
     ), 
      array(
      'forename' => 'Bar', 
      'surname' => 'Foo' 
     ) 
    ); 

    $arr = array(); 


    foreach($items as $item){ 
     $arr['name'][] = $item['forename']; 
     $arr['surname'][] = $item['surname']; 

    } 

    echo "<pre>".print_r($arr, true)."</pre>"; 
?> 

檢查出把http://3v4l.org/v2GhH

相關問題