如何使用特定键在多维数组中查找特定值

时间:2019-06-25 06:54:58

标签: php

我有一个看起来像这样的数组

$myArray = Array
(
    [Standardbox] => Array
        (
            [details] => Array
                (
                    [name] => Standardbox
                )

            [resources] => Array
                (
                    [0] => Array
                        (
                            [resourceId] => 1
                            [resourceName] => Knife
                            [amount] => 1
                            [unit] => 2
                        )

                    [1] => Array
                        (
                            [resourceId] => 2
                            [resourceName] => Fork
                            [amount] => 1
                            [unit] => 2
                        )

                )

        )

)

,我想检查数组中是否存在value 1(刀)的key中的resourceId

我在stackoverflow上找到了一些功能,但是对于我的目的并没有真正起作用:

这看起来很有希望,但我认为它并不认为数组是多维的:

function multi_key_in_array($needle, $haystack, $key) 
{
    foreach ($haystack as $h) 
    {
        if (array_key_exists($key, $h) && $h[$key]==$needle) 
        {
            return true;
        }
    }
    return false;
}

然后致电

if(multi_key_in_array(1, $myArray, "resourceId"))
{
     // It is present in the array
}

我们非常感谢您的帮助!

5 个答案:

答案 0 :(得分:2)

@using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post)) { 
   <input type="submit" value="Match" />
}

答案 1 :(得分:1)

您可以将array_columnin_array一起使用

$find = 1;
$r = in_array($find,array_column($myArray['Standardbox']['resources'], 'resourceId'));
echo $r;

https://3v4l.org/Gck1l

答案 2 :(得分:1)

function arr_find_recursive($key, $value, $array)
{
    foreach ($array as $arr_key => $arr_val) 
    {
        if (is_array($arr_val))
        {
            if (arr_find_recursive($key, $value, $arr_val))
            {
                return true;
            }
        }
        else
        {
            if ($arr_key === $key && $arr_val === $value) 
            {
                return true;
            }
        }
    }
    return false;
}

//Call function

if (arr_find_recursive("resourceId", 2, $myArray))
{
    echo "exists";
}
else
{
    echo "not found";
}

此函数是递归的,可以在任何深度的数组中找到键值对。

答案 3 :(得分:0)

$result = in_array('1', array_column($myArray['Standardbox']['resources'], 'resourceId'));
if($result)
echo $result.' - found';
else 
echo 'Not found';

答案 4 :(得分:0)

据我了解,您需要检查resourceId值之一是否为1。可以通过遍历数组值来做到这一点。例如:

function IsResourcePresent($myArray) {
    $resources = $myArray['Standardbox']['resources'];
    for ($count = 0; $count < count($resources); $count++) {
        if ($resources[$count]['resourceId'] == '1') return true;
    }
    return false;
}

IsResourcePresent($myArray);