在数组中的数组中添加前缀,然后返回它

时间:2014-04-01 13:51:06

标签: php arrays

这就是我所拥有的:

 $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" } } }

问题 - 不起作用。

任何?提前谢谢。

3 个答案:

答案 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;
}