2014-04-01 80 views
1

這是我有:添加前綴在數組的數組中,然後返回它

$tests = array(
    'id' => 'world', 
    'level2' => array(
     array(
      'id' => 'world2' 
     ), 
     array(
      'id' => 'world3' 
     ), 
     array(
      'id' => 'world4' 
     ), 
    ) 
); 

我想要什麼 - 前綴像'hello '所有'id' S IN 'level2'陣列

我已經試過:

$tests = testing($tests); 

function testing($tests) { 
    foreach ($tests['level2'] as $test) { 
     $test['id'] = 'hello ' . $test['id']; 
    } 

    return $tests; 
} 

var_dump($tests); 

結果:array(2) { ["id"]=> string(5) "world" ["level2"]=> array(3) { [0]=> array(1) { ["id"]=> string(6) "world2" } [1]=> array(1) { ["id"]=> string(6) "world3" } [2]=> array(1) { ["id"]=> string(6) "world4" } } }

問題 - 不起作用。

有人嗎?提前致謝。

回答

3

您可以使用鍵來改變你原來的數組:

$tests = testing($tests); 

function testing($tests) { 
    foreach ($tests['level2'] as $key=>$test) { 
     $tests['level2'][$key]['id'] = 'hello ' . $test['id']; 
    } 

    return $tests; 
} 

var_dump($tests); 
+0

謝謝!這對我有效。 – Bobby

2

的問題是,使用foreach循環時,$test成爲複製,所以更新不會更新原有的陣列。

您可以修復通過傳遞$測試作爲參考:

function testing($tests) { 
    foreach ($tests['level2'] as &$test) { 
     $test['id'] = 'hello ' . $test['id']; 
    } 

    return $tests; 
} 
+0

對不起,是不是代碼塊與我的完全一樣? – Bobby

+0

差不多,它是通過使用**'&$ test' **來代替''test'作爲參考。它以更緊湊的方式解決了您的問題。 – aurbano

3

除了其他答案:PHP通過array_map()功能提供那麼你不需要使用任何循環可言。

function addToId($level) { 
    $level['id'] = 'hello'.$level['id']; 
    return $level; 
} 
function testing($tests) { 
    $tests['level'] = array_map('addToId', $tests['level']); 
    return $tests; 
} 

在這裏你只需要確保,你叫array_map()$tests['level']而不是$tests本身。

+0

非常感謝,這對我來說是新鮮事物。 – Bobby

相關問題