检查多维数组中是否存在特定值

问题描述 投票:0回答:4

我有一个像这样的多维数组

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的方式。复杂性较低的解决方案会很好。

php multidimensional-array
4个回答
1
投票

试试这个:

$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

eval.in demo

代码只是在foreach中运行in_array。这将适用于2D阵列,但不适用于具有更多尺寸的阵列。如果您的问题实际上不仅仅是2D数组,请告诉我。


0
投票

最好的方法是跟随

<?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/


0
投票

我假设您使用了递归的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
        )

)

0
投票
$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);
© www.soinside.com 2019 - 2024. All rights reserved.