假设我有一个类似的数组:
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 ) ) ) )
我希望能够构建一个可以传递字符串的函数,该函数将用作数组索引路径并返回适当的数组值,而无需使用eval()。那可能吗?
eval()
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 }
您可以使用数组作为路径(从左到右),然后使用递归函数:
$indexes = {0, 'Data', 'name'}; function get_value($indexes, $arrayToAccess) { if(count($indexes) > 1) return get_value(array_slice($indexes, 1), $arrayToAccess[$indexes[0]]); else return $arrayToAccess[$indexes[0]]; }