在多维数组中查找键并更改值

时间:2017-10-06 13:05:42

标签: php arrays multidimensional-array

我正在编写一个PHP脚本,其中一个没有固定深度的多维数组。例如:

$myArray = [
  'item01' => [
      'section01' => [
        'part01'
      ]
    ],
  'item02' => [
    'section02' => [
      'part02' => [
        'something01'
      ]
    ]
  ],
  'item03' => [
    'section03'
  ]
]

我有一个字符串,其中包含应更改的的路径。例如:

$myPath = 'item02/section02/part02'

我有新值

$myValue = 'somethingElse'

我尝试做的是按照$ myPath中设置的路径更改数组$ myArray,将值更改为$ myValue。

预期输出,以及上面的示例,将是:

$myArray = [
  'item01' => [
      'section01' => [
        'part01'
      ]
    ],
  'item02' => [
    'section02' => [
      'part02' => [
        'somethingElse'
      ]
    ]
  ],
  'item03' => [
    'section03'
  ]
]

我已经尝试了几种方法,但不断对此感到难过。最后,它总是达到解决方案的核心点。橡胶鸭子也没有帮助。我知道的其他程序员也无法找到解决方案。

我希望这里的某个人至少可以提供一些新方法来研究这个问题。

PS:上面的所有内容都是伪代码,因为这个问题似乎并不是特定于语言的。

1 个答案:

答案 0 :(得分:1)

尝试以下方法:

$myPath = 'item02/section02/part02';
$path = explode('/', $myPath);

$arr = &$myArray;
foreach($path as $key)
{
    $arr = &$arr[$key];
}

$arr = "somethingElse";

var_dump($myArray);

首先使用$myPatharray字符串转换为explode个键。

这使用一个简单的循环foreach循环来使用键循环遍历数组,然后通过引用传递值来替换最深的值。 Demo Here