2017-10-06 139 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