2012-04-16 43 views
0

我有這樣一個數組:搜索值

> Array 
> (
>> [trilha] => 1 
>> [0] => Array 
>>>  (
>>>   [trilha] => 1,5 
>>>   ) 
>) 

,我想關鍵TRILHA過,插入相關的值:

> Array 
> (
>> [1] => A 
>> [1,5] => B 
>> [1,5,4] => C 
>) 

這可能嗎?

結果應該是:

> Array 
> (
>> [trilha] => 1 
>> [INSERTED] => A 
>> [0] => Array 
>>>  (
>>>   [trilha] => 1,5 
>>>   [INSERTED] => B 
>>>   ) 
>) 

我從插入輔助陣列中的值變成第一個。

+1

我不能肯定你想要做什麼。你能添加你期望的結果數組的樣子嗎? – JJJ 2012-04-16 20:03:20

+0

借調。由於我們不會說葡萄牙語(至少這就是我看起來的樣子),所以將您的索引和值翻譯成英語會使我們對自己更加清楚 – dtech 2012-04-16 20:05:58

+1

A'(,'B','C')在哪裏? '1,5,4'在哪裏? – hakre 2012-04-16 20:06:09

回答

0

一些工作示例,基於棧的遞歸迭代和修改與PHP變量別名:

// to be modified: 
$base = array(
    'trilha' => '1', 
    array(
     'trilha' => '1,5', 
    ), 
); 

// data for modification, binding value is key 
$insert = Array(
    1 => 'A', 
    '1,5' => 'B', 
    '1,5,4' => 'C', 
); 

/* 
* stack based traversal and modifcation 
*/ 
$stack = array(); 
$stack[] = &$base; 
$first = 0; 
while ($stack) 
{ 
    $proc = & $stack[$first]; 
    unset($stack[$first++]); 

    foreach ($proc as &$val) { 
     if (is_array($val)) { 
      $stack[] = &$val; 
     } 
    } 

    if (!isset($proc['trilha'])) { 
     continue; 
    } 
    $trilha = $proc['trilha']; 
    if (!isset($insert[$trilha])) { 
     continue; 
    } 
    $proc['INSERTED'] = $insert[$trilha]; 
} 
unset($proc); 

var_dump($base); 
+0

謝謝!幫助我清楚地看到一些其他有趣的方法來解決問題! – 2012-04-17 04:52:42

+0

@Erick:這也是「遞歸」的,但只有遍歷(所以沒有遞歸函數調用)。插入的部分應該放在'foreach'下面,因爲我會看到它,會更新答案。 – hakre 2012-04-17 08:30:42