这就是我所拥有的:
$tests = array(
'id' => 'world',
'level2' => array(
array(
'id' => 'world2'
),
array(
'id' => 'world3'
),
array(
'id' => 'world4'
),
)
);
我想要的内容 - 为'hello '
数组中的所有'id'
添加'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" } } }
问题 - 不起作用。
任何?提前谢谢。
答案 0 :(得分: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 );
答案 1 :(得分: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
本身。
答案 2 :(得分:2)
问题在于,当使用foreach
循环时,$test
会成为副本,因此更新不会更新原始数组。
你可以通过传递$ test作为参考来解决这个问题:
function testing( $tests ) {
foreach ( $tests['level2'] as &$test ) {
$test['id'] = 'hello ' . $test['id'];
}
return $tests;
}