我有一个像这样的多维数组
Array
(
[jack] => Array
(
[0] => 12
[1] => 45
[2] => 78
[3] => 19
[4] => 94
[5] => 668
)
[john] => Array
(
[0] => 641
[1] => 741
[2] => 683
[3] => 603
)
)
我如何搜索641,如果找到则返回它的父键。即。如果找到641,我想得到约翰。
这就是我尝试过的
if(in_array_r("641" , $array)){
// if found return john!
}
要么
if(in_array_r("12" , $array)){
// if found return jack!
}
我正在寻找一种不包括foreach loop
的方式。复杂性较低的解决方案会很好。
试试这个:
$arr = [
'jack' => [
12,
45,
78,
19,
94,
668,
],
'john' => [
641,
741,
683,
603,
],
];
function in_array_r ($needle, $haystack) {
foreach ($haystack as $key => $subArr) {
if (in_array($needle, $subArr)) {
return $key;
}
}
return false;
}
echo in_array_r(641, $arr); // => john
echo "\n";
echo in_array_r(12, $arr); // => jack
代码只是在foreach中运行in_array
。这将适用于2D阵列,但不适用于具有更多尺寸的阵列。如果您的问题实际上不仅仅是2D数组,请告诉我。
最好的方法是跟随
<?php
$myarr = Array
(
'Jack' => Array
(
'uid' => '100',
'name' => 'Sandra Shush',
'url' => 'urlof100'
),
'John' => Array
(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
echo checkData($myarr,100);
function checkData( $myarr,$myvalue )
{
foreach( $myarr as $key => $value ){
if( in_array( $myvalue, $value ) ){
return $key;
}
}
return false;
}
检查它http://phptester.net/
我假设您使用了递归的in_array函数,如下所示:https://gist.github.com/Billy-/bc6865066981e80e097f
我已经修改它以满足您的要求(因此它可以根据需要返回数组的键):
function in_array_r($needle, $haystack, $strict = false) {
foreach ($haystack as $item) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict)!==FALSE)) {
return key($haystack);
}
}
return false;
}
您应该能够将其用作:
echo in_array_r('641',$array); // Prints john
echo in_array_r('12',$array); // Prints jack
我假设的数组是你的问题:
Array
(
[jack] => Array
(
[0] => 12
[1] => 45
[2] => 78
[3] => 19
[4] => 94
[5] => 668
)
[john] => Array
(
[0] => 641
[1] => 741
[2] => 683
[3] => 603
)
)
$arr = Array(
"jack" => Array(12, 45, 78, 19, 94, 668),
"john" => Array("641", 741, 683, 603),
);
$tofind = 641;
function getKey($arr, $tofind) {
foreach($arr as $key => $val){
if(in_array($tofind, $val)){
return $key;
}
}
return "not found";
}
echo getKey($arr, $tofind);