在数组中搜索键(PHP)
如何在包含更多数组的数组中搜索键。 例如,我想在“arr”中搜索“key”,并返回以下内容:在数组中搜索键(PHP),php,arrays,Php,Arrays,如何在包含更多数组的数组中搜索键。 例如,我想在“arr”中搜索“key”,并返回以下内容: arr["some_inner_array"]["another_array_possible"][key"] array\u key\u exists可以告诉我它是否存在,但当然我真正需要的是值 我希望我的问题是清楚的 编辑: 根据下面的答案,我成功地实现了一个递归函数: function look_in_array ( $array, $key ) { if ( is
arr["some_inner_array"]["another_array_possible"][key"]
array\u key\u exists可以告诉我它是否存在,但当然我真正需要的是值
我希望我的问题是清楚的
编辑:
根据下面的答案,我成功地实现了一个递归函数:
function look_in_array ( $array, $key ) {
if ( isset($array[$key]) )
return $array[$key];
foreach ($array as $item) {
if (is_array($item)) {
$value = look_in_array ($item,$key);
if ($value)
return $value;
}
}
}
该功能应在以下情况下发挥作用:
function array_key_exists_recursive($searchKey, $array)
{
$result = false;
foreach($array as $key => $value)
{
if(is_array($array[$key]))
{
$result = array_key_exists_recursive($searchKey, $array[$key]);
}
else if(array_key_exists($searchKey, $array))
{
$result = $array[$searchKey];
}
if($result)
break;
}
return $result;
}
Exmaple:
$array = array( "a" => array("b" => "1", "c" => "2") );
var_dump(array_key_exists_recursive("c", $array)); //Result: 2
你可以这样问:
isset(arr["some_inner_array"]["another_array_possible"]["key"])
这对你有用吗?否则,也许更好地解释一下您试图实现的目标会对我们有所帮助:)您需要迭代第一个数组中的所有元素,然后使用
array\u key\u exists()
:
试试这个:
/**
* @param $path array containing path
* @param $array search array
* @return element matching path or null
*/
function arr_search($path, &$array){
$tmp = &$array;
for($i = 0; $i < count($path); $i++){
if(!isset($tmp[$path[$i]])) return null;
$tmp = &$tmp[$path[$i]];
}
return $tmp;
}
$arr = array(
'a' => array(
'b' => array(
'c' => 'abc',
),
'd' => array('ad'),
),
10 => array(100, 200, 300),
);
var_dump(arr_search(array('a', 'b', 'c'), $arr));
var_dump(arr_search(array('a', 'd'), $arr));
var_dump(arr_search(array(10, 100), $arr));
var_dump(arr_search(array(10, 1), $arr));
你要求的与
$arr[“某个内部数组”][“另一个内部数组可能”][“key”]
?我不知道key是否在这里arr[“某个内部数组”][“另一个内部数组可能”][key”]。可能在这里:arr[“完全不同的数组”][key”]不,我在$arr中寻找$key。可能是$arr[“完全不同的数组”[$key]我很高兴能帮上忙。虽然我优化了函数,删除了不必要的代码。但问题是我不知道路径。我只知道钥匙。它可以在数组中的任何位置……对不起,我以为你知道路径。@piotrekkr:当然,但另一个数组可能有相同的键!
/**
* @param $path array containing path
* @param $array search array
* @return element matching path or null
*/
function arr_search($path, &$array){
$tmp = &$array;
for($i = 0; $i < count($path); $i++){
if(!isset($tmp[$path[$i]])) return null;
$tmp = &$tmp[$path[$i]];
}
return $tmp;
}
$arr = array(
'a' => array(
'b' => array(
'c' => 'abc',
),
'd' => array('ad'),
),
10 => array(100, 200, 300),
);
var_dump(arr_search(array('a', 'b', 'c'), $arr));
var_dump(arr_search(array('a', 'd'), $arr));
var_dump(arr_search(array(10, 100), $arr));
var_dump(arr_search(array(10, 1), $arr));
function arr_search($key, $array){
$values = array();
if(array_key_exists($key, $array)) $values[] = $array[$key];
$stack = array_values($array);
while($tmp = array_pop($stack)){
if(is_array($tmp)){
foreach($tmp as &$v){
array_push($stack, $v);
}
if(array_key_exists($key, $tmp)){
$values[] = $tmp[$key];
}
}
}
return $values;
}
$arr = array(
'a' => array(
'b' => array(
'c' => 'abc',
),
'd' => array('ad'),
),
'e' => array(
'a' => array(
'b' => 'abc',
),
'b' => array('xyz'),
),
10 => array(100, 200, 300),
);
var_dump(arr_search('b', $arr));
var_dump(arr_search(0, $arr));