1

다차원 배열에서 원하는 모든 키를 동적으로 가져올 수 있습니까?PHP : 다차원 배열에서 원하는 모든 키를 동적으로 가져올 수 있습니까?

$f['Kitchen']['Dishes']['Mantovarka']=3; 
$f['Kitchen']['Dishes']['Castrool']=91; 
$f['Kitchen']['Dishes']['Separator']=10; 
$f['Kitchen']['Product']=18; 
$f['Kitchen']['Textile']=19; 
$f['Kitchen']['Blue things']['Juicemaker']=25; 
$f['Kitchen']['Blue things']['Freegener']=13; 
$f['Kitchen1']['Blue things One']['Microwave']=4; 
$f['Kitchen1']['Blue things One']['Iron']=24; 
$f['Kitchen1']['Dishes One']['Separator']=110; 

예를 들어 'Kitchen1'과 'Dishes'및 'Iron'에 각각 도달하려는 경우입니다.

$kitchenKeys = "{'Kithcen1'}"; 
var_dump($f[$kitchenKeys]); 
Output: 
NULL 

$dishKeys = "{'Kitchen'}][{'Dishes'}"; 
var_dump($f[$dishKeys]); 
Output: 
NULL 

$ironKeys = "{'Kitchen1'}][{'Blue things One'}][{'Iron'}"; 
var_dump($f[$ironKeys]); 
Output: 
NULL 

우리는 다차원 배열의 모든 key`s 값을 얻기 위해 동적으로 $ kitchenKeys 및/또는 $ dishKeys 및/또는 $ ironKeys에 키를 할당 할 수

var_dump($f['Kitchen1']); 
Output: 
[ 
    'Blue things One' => [ 
     'Microwave' => 4 
     'Iron' => 24 
    ] 
    'Dishes One' => [ 
    'Separator' => 110 
    ] 
] 

var_dump($f['Kitchen']['Dishes']); 
Output: 
[ 
    'Mantovarka' => 3 
    'Castrool' => 91 
    'Separator' => 10 
] 

var_dump($f['Kitchen1']['Blue things']['Iron']); 
Output: 
24 

나는 그것을 도달하려고 노력 ?

+2

나는 당신이 ('평가를해야 할 것 같아요)'do do do – Chay22

+0

나는 당신이 동적으로 무엇을 의미하는지에 달려 있다고 생각한다. 변수에 값을 쉽게 할당하여 액세스 할 수 있습니다. 예 : '$ value1 = "주방 1"; $ value2 = "요리 한 개"; print_r ($ f [$ value1] [$ value2]); ' – Matt

답변

1

Chay22는 정확하고 this

이 작동에 기반; eval('var_dump($f['.$dishKeys.']);');

당신은 또한 당신이 점 표기법을 사용하여 내부 키에 액세스하는 기능을 사용할 수 있습니다, 또는이

eval('$newkey = ($f['.$dishKeys.']);'); 
var_dump($newkey); 
0

처럼 사용 가능한 변수로 만들 수 있습니다. 예 : "key1.key2.key3". 이러한 예는 다음에서 찾을 수 있습니다. https://github.com/rappasoft/laravel-helpers/blob/master/src/helpers.php

그러나 위에서 설명한 eval 메서드도 작동합니다. 그러나 설정되지 않은 키로 인해 오류가 발생하기 쉽고 사용자 입력에서 동적 키를 설정하면 위생이 문제가됩니다.

1

필자가 동적으로 할 수있는 방법은 값 배열을 얻는 것입니다. 그리고 foreach 내부에서 (함수 내부에서 한 번 이상 사용한다면 함수를 사용합니다.) 배열의 요소에 대한 문자열을 생성합니다. 그런 다음 실행할 명령이 들어있는 문자열을 설정하고 마지막으로 eval()으로 실행하십시오. eval()은 위험 할 수 있으므로 특히 사용자가 생성하는 경우 이러한 배열에 포함될 내용에주의하십시오.

$dishKeysArray = array("Kitchen", "Dishes"); 

$evalString = getEvalString($dishKeysArray); 

eval($evalString); 

function getEvalString($array){ 
    $elementString = ""; 
    foreach($array as $arr){ 
     $elementString .= "['$arr']"; 
    } 
    $evalString = 'var_dump($f' . $elementString . ');'; 
    return $evalString; 
} 

희망이 도움이됩니다.

참고 이중 & 따옴표의 특정 사용, 때로는 우리가 실제로 배열의 값을 사용하려면 때로는 우리가 문자 그대로 출력 배열 이름에 원하는이 ($f)

+0

제안 해 주셔서 감사합니다! 다음과 같이 사용했습니다 : '$ my_array = array ("0"=> "Kitchen1", "1"=> ​​"Blue things One"); 추출 ($ my_array, EXTR_PREFIX_ALL, '색인'), ' '$ dishKeys = "'{$ index_0} '] ['{$ index_1} '"; eval ('$ newkey = ($ f ['. $ dishKeys. ']);'); var_dump ($ newkey);' – juma