2012-03-31 20 views
2

我已经和相关的阵列看起来像这样:在创建关联数组新的密钥和提升价值,以它

array(225) { 
    [0]=> 
    array(3) { 
    ["id"]=> 
    string(1) "1" 
    ["firstname"]=> 
    string(2) "me" 
    ["lastname"]=> 
    string(2) "ab" 
    [1]=> 
    array(3) { 
    ["id"]=> 
    string(1) "2" 
    ["firstname"]=> 
    string(3) "you" 
    ["lastname"]=> 
    string(2) "bc" 

正如你可能所有元素的结构是相同的。我想要做的是建立在嵌套数组dynamiclly新的密钥,这样的事情:

array(225) { 
     [0]=> 
     array(4) { 
     ["id"]=> 
     string(1) "1" 
     ["firstname"]=> 
     string(2) "me" 
     ["lastname"]=> 
     string(2) "ab" 
     ["newKey"]=> 
     string() "1,2,3,....n" 
     [1]=> 
     array(3) { 
     ["id"]=> 
     string(1) "2" 
     ["firstname"]=> 
     string(3) "you" 
     ["lastname"]=> 
     string(2) "bc" 
     ["newKey"]=> 
     string() "1,2,3,....x" 

,我想新的记录添加到与关键[“则newkey”]的价值,但在某种程度上,该旧值不会被删除,但如上所示 - 我们用逗号和其他值分隔每个新值。

我试过array_push和一些其他的东西,但不能得到我想要的确切结果。

回答

3

我不知道这是否是你所需的东西,但似乎这样的事情可能做的伎俩做:

function addField(array &$aData, $newVal) 
{ 
    foreach($aData as $aUnit) 
     if(array_key_exists('newKey', $aUnit)) 
      $aUnit['newKey'] .= ",$newVal"; 
     else 
      $aUnit['newKey'] = '1'; 
} 

让我知道如果你喜欢的是扩展后,如果它不是足够的基础让你滚动。

+0

这正是我所需要的,虽然我不太了解引用的需求,但它更像是一个理论问题。 – Leron 2012-03-31 05:35:45

+0

该引用将阻止创建数组的副本。另一种方法是不要传递引用,在这种情况下,对函数的调用看起来像是'$ aData = addField($ aData,5);'。你看到那里,你正在创建一个新的数组并替换旧的数组,而不是仅仅修改现有的数组。 – quickshiftin 2012-03-31 05:39:34

+1

谢谢,这个信息很有用! – Leron 2012-03-31 05:45:03

相关问题