用 array_key 调用数组并获取数组值
Call array with array_key and get the array value
我想将多维数组的一个键发送给一个函数并获取该键的值,它应该是一个项目或子数组。想象一下我有这个功能:
public function returnArray($index){
$arr = [
'name' => 'ali',
'children' => [
'1' => 'reza',
'2' => 'hasan',
'3' => 'farhad',
'info' => [
'a',
'b',
'c'
]
]
];
return $arr[$index];
}
当我这样称呼它时:
returnArray('[name][children][info]')
结果应该是来自该数组的 info
。
我该怎么办?
提前致谢。
如果您要从 3 维数组中寻找 return 1 维数组,您可以发送 3 个参数,$key1、$key2 和 $key3,以及 return值将是数组[$key1][$key2][$key3]
仅供参考,这段代码闻起来很糟糕 - 在字符串中重新实现数组,这让我觉得像这样直接访问数组可能是个好主意:
$arr["name"]["children"]["info"]
但是,为了获得完整的答案,让我们编写一个函数来执行您想要的操作。
首先,函数已经有了参数,而不是在单个字符串中传递索引,所以让我们利用这个特性。在函数中,您可以使用 [func_get_args](http://php.net/manual/en/function.func-get-args.php)
.
获取包含所有传入参数的数组
// remove the parameter $index, as we don't know how many parameters there will be.
function returnArray(){
$arr = [
'name' => 'ali',
'children' => [
'1' => 'reza',
'2' => 'hasan',
'3' => 'farhad',
'info' => [
'a',
'b',
'c'
]
]
];
// store reference to the position in the array we care about:
$position = $arr;
foreach(func_get_args() as $arg) {
// update the reference to the position according to the passed in parameters.
$position = $position[$arg];
}
return $position;
}
然后我们可以这样调用函数:
returnArray("children", "info");
/* Returns:
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
*/
你可以这样做:
public function returnArray(){
$indexes = func_get_args();
$arr = [
'name' => 'ali',
'children' => [
'1' => 'reza',
'2' => 'hasan',
'3' => 'farhad',
'info' => [
'a',
'b',
'c'
]
]
];
$tmp = &$arr;
while($index = array_shift($indexes)){
$tmp = &$tmp[$index];
}
return $tmp;
}
然后:
returnArray('name','children','info');
但是如果你想the result should be info
那么做:
returnArray('children','info');
这只是一种方法;)
我想将多维数组的一个键发送给一个函数并获取该键的值,它应该是一个项目或子数组。想象一下我有这个功能:
public function returnArray($index){
$arr = [
'name' => 'ali',
'children' => [
'1' => 'reza',
'2' => 'hasan',
'3' => 'farhad',
'info' => [
'a',
'b',
'c'
]
]
];
return $arr[$index];
}
当我这样称呼它时:
returnArray('[name][children][info]')
结果应该是来自该数组的 info
。
我该怎么办?
提前致谢。
如果您要从 3 维数组中寻找 return 1 维数组,您可以发送 3 个参数,$key1、$key2 和 $key3,以及 return值将是数组[$key1][$key2][$key3]
仅供参考,这段代码闻起来很糟糕 - 在字符串中重新实现数组,这让我觉得像这样直接访问数组可能是个好主意:
$arr["name"]["children"]["info"]
但是,为了获得完整的答案,让我们编写一个函数来执行您想要的操作。
首先,函数已经有了参数,而不是在单个字符串中传递索引,所以让我们利用这个特性。在函数中,您可以使用 [func_get_args](http://php.net/manual/en/function.func-get-args.php)
.
// remove the parameter $index, as we don't know how many parameters there will be.
function returnArray(){
$arr = [
'name' => 'ali',
'children' => [
'1' => 'reza',
'2' => 'hasan',
'3' => 'farhad',
'info' => [
'a',
'b',
'c'
]
]
];
// store reference to the position in the array we care about:
$position = $arr;
foreach(func_get_args() as $arg) {
// update the reference to the position according to the passed in parameters.
$position = $position[$arg];
}
return $position;
}
然后我们可以这样调用函数:
returnArray("children", "info");
/* Returns:
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
*/
你可以这样做:
public function returnArray(){
$indexes = func_get_args();
$arr = [
'name' => 'ali',
'children' => [
'1' => 'reza',
'2' => 'hasan',
'3' => 'farhad',
'info' => [
'a',
'b',
'c'
]
]
];
$tmp = &$arr;
while($index = array_shift($indexes)){
$tmp = &$tmp[$index];
}
return $tmp;
}
然后:
returnArray('name','children','info');
但是如果你想the result should be info
那么做:
returnArray('children','info');
这只是一种方法;)