【问题标题】:Find array key in php and change its value or contents?在php中查找数组键并更改其值或内容?
【发布时间】:2025-12-02 23:35:01
【问题描述】:

给定一个你不一定知道其结构的多维数组;如何按名称搜索密钥并更改或添加其内容?键的值可以是字符串或数组,效果应该以任何一种方式应用——我看过array_walk_recursive,但它忽略了任何包含另一个数组的东西......

【问题讨论】:

标签: php arrays multidimensional-array


【解决方案1】:

这行得通吗?

function arrayWalkFullRecursive(&$array, $callback, $userdata = NULL) {
    call_user_func($callback, $value, $key, $userdata);

    if(!is_array($array)) {
        return false;
    }

    foreach($array as $key => &$value) {
        arrayWalkFullRecursive($value);
    }

    return true;
}

arrayWalkFullRecursive($array,
    create_function(                // wtb PHP 5.3
        '&$value, $key, $data',
        'if($key == $data['key']) {
             $value = $data['value'];
         }'
    ),
    array('key' => 'foo', 'value' => 'bar')
);

【讨论】:

  • 不太奏效,但让我走上了正轨。我整理了一个名为 remove_recursive() 的函数来删除数组项,现在我需要创建 add_recursive() 和 change_recursive()。 :)
  • 这个答案缺少教育解释。
【解决方案2】:

PHP 中的数组键是整数和字符串。你不能有一个数组数组键。所以,是的,array_walk_recursive() 就是你想要的。

【讨论】:

  • 我的意思是键对应的值。如果该值是另一层数组,它将跳过它并向内递归,直到找到具有非数组值的东西。