문자열을 인덱스 경로로 사용하여 배열 값에 액세스하는 방법
복잡한 구조의 배열이 있는 경우 다음과 같은 문제가 발생할 수 있습니다. 해당 값에 대한 경로를 나타내는 문자열을 사용하여 특정 값에 액세스해야 합니다. 잠재적인 보안 취약점으로 인해 eval() 사용은 권장되지 않습니다. 대신 이 작업을 처리할 수 있는 사용자 정의 함수를 생성하는 것이 가능합니다.
다음 예제 배열을 고려하세요.
Array ( [0] => Array ( [Data] => Array ( [id] => 1 [title] => Manager [name] => John Smith ) ) [1] => Array ( [Data] => Array ( [id] => 1 [title] => Clerk [name] => ( [first] => Jane [last] => Smith ) ) ) )
문자열을 인덱스 경로로 사용하고 입력으로 액세스할 배열:
function($indexPath, $arrayToAccess) { // $indexPath would be something like [0]['Data']['name'] which would return // "Manager" or it could be [1]['Data']['name']['first'] which would return // "Jane" but the amount of array indexes that will be in the index path can // change, so there might be 3 like the first example, or 4 like the second. return $arrayToAccess[$indexPath] // <- obviously won't work }
원하는 기능을 구현하려면 폭발() 함수를 활용할 수 있습니다.
$paths = explode(":", $indexPath); $itens = $myArray; foreach($paths as $ndx){ $itens = $itens[$ndx]; }
이 예에서 $pathStr은 입력을 나타냅니다. 문자열 경로이고 $myArray는 액세스하려는 배열입니다. 이 코드는 $indexPath에서 콜론(:)으로 구분된 하위 문자열인 $paths의 요소를 반복하고 현재 $itens 반복에서 $ndx에 있는 값으로 $itens를 업데이트합니다.
결과적으로 $itens에는 지정된 문자열 경로를 기반으로 배열에서 찾고 있는 값이 포함됩니다. 이 방법은 PHP 코드를 동적으로 실행하지 않으므로 eval()을 사용하는 것보다 더 안전하고 유연합니다.
위 내용은 보안상의 이유로 eval()을 사용하지 않고 문자열을 인덱스 경로로 사용하여 복잡한 배열의 특정 값에 액세스하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!