2017-10-06 33 views
0

我正在写一个PHP脚本,其中我得到了一个没有固定深度的多维数组的。例如:查找多维数组中的键并更改值

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

我有一个包含路径,应该改变的价值的字符串。例如:

$myPath = 'item02/section02/part02' 

和我有新值

$myValue = 'somethingElse' 

我想要做的,是要经过数组$ myArray的在$ mypath中设置更改值的路径如下到$ myValue。

预期的输出,与上面的例子,会是这样:

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

我尝试了多种方法,但要在这个越来越难住了。最终,解决方案的核心内容始终如一。橡皮鸭也没有帮助。我知道的其他程序员也无法找到解决方案。

我希望这里有人能够提供一些新的方法来研究这一点。

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

+0

不重复。那是一个固定深度的多维阵列。在这个问题中提供的所有解决方案都不适用于这里解释的问题。 – Raf

+0

显示您的预期产量 –

+0

增加预期产量 – Raf

回答

1

尝试以下操作:

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

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

$arr = "somethingElse"; 

var_dump($myArray); 

首先打开$myPath字符串转换成使用explode键的array

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

+1

谢谢!这似乎在演示中起作用。我现在已经在我的代码中尝试过了,它似乎也能够工作!奇怪的是,我之前也尝试过这种方式,但它一直覆盖整个阵列。我很好奇它们有什么不同。在完成这件事之后,我会研究一下。 – Raf