PHP循环遍历多维数组并更改值

7

我有一个多维数组如下,我想遍历它并将[menu_cats]的值从数字更改为字符串,该字符串是从数据库选择中提取的。这是可能的吗?数组的名称为“result”。

Array
(
[0] => Array
    (
        [0] => Array
            (
                [menu_cats] => 1                    
                [item] => Introduction
                [link] => needs
            )

        [1] => Array
            (
                [menu_cats] => 1
                [item] => Needs Assessment
                [link] => needs/needs.php
            )

    )

[1] => Array
    (
        [0] => Array
            (
                [menu_cats] => 2                    
                [item] => Introduction
                [link] => knowledge
            )

        [1] => Array
            (
                [menu_cats] => 2
                [item] => Administer Knowledge Pre-Test
                [link] => knowledge/pre_test.php
            )
    )

)
3个回答

11
foreach($result as $key => $subarray) {
   foreach($subarray as $subkey => $subsubarray) {
      $result[$key][$subkey]['menu_cats'] = 'your string here';
   }
}

3
需要一个递归函数,可以处理超过一个层级。 - gagarine

0

您可以使用递归算法循环遍历所有 JSON 数组

$menuData = [
    [
        ['menu_cats' => 1, 'item' => 'Introduction', 'link' => 'needs'],
        ['menu_cats' => 1, 'item' => 'Needs Assessment', 'link' => 'needs/needs.php'],
    ],
    [
        ['menu_cats' => 2, 'item' => 'Introduction', 'link' => 'knowledge'],
        ['menu_cats' => 2, 'item' => 'NeedsAdminister Knowledge Pre-Test', 'link' => 'needsknowledge/pre_test.php'],
    ],
];

recursiveArray($menuData);
print_r($menuData);

# A recursive function to traverse the $rowData array
function recursiveArray(array &$rowData)
{
    foreach ($rowData as $key => &$hitElement) {
        # If there is a element left
        if (is_array($hitElement)) {
            # call recursive structure to parse the $rowData
            recursiveArray($hitElement);
        } else {
            if ($key === 'menu_cats') {
                $hitElement = 'new value';
            }
        }
    }
}

实时代码 -> https://wtools.io/php-sandbox/bFER

或者使用RecursiveArrayIterator来遍历$menuData数组


0

最快、最好的选择是使用array_walk_recursive(),它是一个本地的php函数,因此比任何其他php编码的解决方案都要快得多:

array_walk_recursive(
    $array,
    static function (&$value, $key) {
        if ($key==='menu_cats') {
            $value = 'new value';
        }
    }
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接