2012-10-24 120 views
3

如果我有一個這樣的數組:陣列關聯數組的,新元素添加到該關聯數組

array(2) { 
    [0]=> 
    array(2) { 
    ["id"]=> 
    string(2) "34" 
    ["total"]=> 
    string(6) "122337" 
    }, 
[1]=> 
    array(2) { 
    ["id"]=> 
    string(2) "43" 
    ["total"]=> 
    string(6) "232337" 
    } 
} 

並且我想要新的密鑰值添加到每個子陣列,因此,例如,它會像這樣結束:

array(2) { 
     [0]=> 
     array(2) { 
     ["id"]=> 
     string(2) "34" 
     ["total"]=> 
     string(6) "122337" 
     ["newkey"]=> 
     string(6) "hihihi" 
     }, 
    [1]=> 
     array(2) { 
     ["id"]=> 
     string(2) "43" 
     ["total"]=> 
     string(6) "232337" 
     ["newkey"]=> 
     string(6) "hihihi" 
     } 
    } 

我該怎麼做?

我試圖用這樣一個foreach:

foreach($exterior_array as $inside_array) { 
$inside_array['newkey'] = "hihihi"; 
} 

但是,一旦我得到的foreach裏面,值不會被保存。

+0

應首先創建元素與空值,如array [1] ='';,然後賦值數組[1] = 2; –

回答

4
foreach($exterior_array as $inside_array) { 
    $inside_array['newkey'] = "hihihi"; 
} 

但是,一旦我得到的foreach裏面,值不會被保存。

這是因爲您正在通過$inside_array來處理數組的副本。您可以通過將$inside_array作爲原始值的別名來訪問要更改的「orignal」值;使用參考:

foreach($exterior_array as &$inside_array) { 
          ^- set the reference 
    $inside_array['newkey'] = "hihihi"; 
} 
unset($inside_array); 
^^^^^^^^^^^^^^^^^^^^^- remove the reference 

http://php.net/foreach

+0

很好的答案。謝謝! –

0
foreach($exterior_array as $k=>$inside_array) { 
$exterior_array[$k]['newkey'] = "hihihi"; 
} 

試試這個

+0

你必須爲$ outer_array設置值,而不是爲$ inside_array :) – Svetoslav

0

因爲你正在使用它作爲一個臨時數組,像這樣做:

foreach($exterior_array as $key => $inside_array) 
{ 
    $exterior_array[$key]['newkey'] = "hihihi"; 
} 

或者你可以用引用做得一樣jpo建議,這將創建一個新的陣列,但保持它與原始鏈接(注意:&):

foreach($exterior_array as &$inside_array) 
{ 
    $inside_array['newkey'] = "hihihi"; 
} 
0
foreach($exterior_array as $key => $inside_array) { 
     $inside_array[$key]['newkey'] = "hihihi"; 
    } 
0

使用引用另一種解決方案:

foreach($exterior_array as &$inside_array) { 
    $inside_array['newkey'] = "hihihi"; 
} 
0

比較試試這個。經過測試和驗證。

<?php 
    $parentArray = array(
     array("id"=>1), 
     array("id"=>2), 
     array("id"=>3), 
    ); 

    foreach($parentArray as $key=>$childArray) 
    { 
     $parentArray[$key]['newkey'] = "hello"; 
    } 

    //output 

    Array 
    (
     [0] => Array 
      (
       [id] => 1 
       [newkey] => hello 
      ) 
     [1] => Array 
      (
       [id] => 2 
       [newkey] => hello 
      ) 
     [2] => Array 
      (
       [id] => 3 
       [newkey] => hello 
      ) 
    ) 
?> 
0

它不是一個完美的適合這個主題,但我在我自己的項目中使用了很多。

http://pastebin.com/TyWzLWuK

它不是很高性能,但容易處理。

實施例:

Fw_Recursive_Array_Helper::set($array, '0.someKey.someSubKey', 'value'); 
if(Fw_Recursive_Array_Helper::has($array, '0.someKey.someSubKey')) { 
    echo Fw_Recursive_Array_Helper::get($array, '0.someKey.someSubKey'); 
} 
echo Fw_Recursive_Array_Helper::get($array, '1.someKey.someSubKey', 'If the key does not exist, use this'); 
0
class helper 
{ 

public function arrayInsert($key=NULL,$value=NULL,& $array=array()) 
{ 

if(!empty($key)&&!empty($value)&&is_array($array)) 
{ 
$array[$key]=$value; 
} 
} 
} 

$obj=new helper(); 


$array=array('1'=>1,'a'=>'a'); 
$obj->arrayInsert('b','b',$array); 
print_r($array) 

O/P =>數組([1] => 1 [α] =>一個並[b] => B)