2017-10-06 1 views
0

고정 깊이가없는이 아닌 다차원 배열의 PHP 스크립트를 작성했습니다. 예 :다차원 배열에서 키를 찾고 값을 변경

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

나는 변경해야합니다 값경로를 포함하는 문자열이 있습니다. 예 :

내가 할 노력하고있어
$myValue = 'somethingElse' 

, 값을 변경 $ MYPATH에서 설정 한 경로를 따라 배열 $ myArray의 통과입니다 :

$myPath = 'item02/section02/part02' 

그리고 나는 새로운 가치이 ~ $ myValue. 위의 예제와 함께

예상 출력은이 될 것입니다 :

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

나는 여러 가지 방법을 시도했지만 계속 한이 난처한 상황에 빠진 지. 결국, 그것은 솔루션이 핵심에 항상 같은 지점에 도달합니다. 고무 duckying도 도움이되지 않았다. 내가 아는 다른 프로그래머들도 해결책을 찾지 못했습니다.

여기 누군가가이 문제를 조사 할 수있는 새로운 방법을 제공 할 수 있기를 바랍니다.

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); 

먼저 키의 arrayexplode을 사용으로 $myPath 문자열을 설정합니다.

루프는 키를 사용하여 배열을 루프하는 간단한 루프 foreach을 사용하고 값을 참조로 전달하여 가장 깊은 값을 대체합니다. Demo Here

+1

감사! 이것은 데모에서 작동하는 것 같습니다. 난 지금 내 코드에서 그것을 시도하고, 잘 작동하는 것! 이상한 점은 이전에이 방법을 사용해 보았지만 배열 전체를 무시하는 것이 었습니다. 차이점에 대해 궁금합니다. 이것을 포장 한 후에 살펴 보겠습니다. – Raf

관련 문제