检测字符串是否在PHP中的多维数组中

时间:2012-04-16 19:59:10

标签: php arrays

我有一个如下所示的数组:

Array
(
[0] => Array
(
    [Product] =>  Amazing Widget
    [Value] => 200
)

[1] => Array
(
    [Product] => Super Amazing Widget
    [Value] => 400
)

[2] => Array
(
    [Product] =>  Promising Widget 
    [Value] => 300
)

[3] => Array
(
    [Product] => Superb Widget
    [Value] => 400
)
)

我相信它是一个嵌套的多维数组。

无论如何,我正在尝试检测数组中是否已存在产品名称。这就是我要做的事情

if('Super Amazing Widget' is in the array) {
    echo 'In the Array';
}

我试过这个:

if(in_array('Super Amazing Widget', $array)){
    echo 'In The Array';
}

但它没有用,我找不到原因。

编辑:

这里的一些功能非常有效:in_array() and multidimensional array

4 个答案:

答案 0 :(得分:5)

in_array不会进行递归搜索,即在子数组中搜索。您需要循环遍历阵列并手动检查您的值。

$found = false;
foreach($arr as $item) {
    if ($item['Product'] == 'Super Amazing Widget') {
        $found = true;
        break;
    }
}
if ($found)
    echo 'found!'; //do something

<强> Live example

答案 1 :(得分:0)

foreach ($array as $item) {
    if ($item["Product"] == "Super Amazing Widget") {
        echo "in the array";
        break;
    }
}

答案 2 :(得分:0)

这不使用循环:

$filt = array_filter($array, create_function('$val',
                                'return $val["Product"] === "Super Amazing Widget";'));
if (!empty($filt)) {
    echo "In The Array\n";
}

答案 3 :(得分:0)

使用类似于上一个答案的array_filter,但使用较新的匿名函数而不是旧的create_function():

if(array_filter(
    $array, 
    function($val) { return $val['Product'] === 'Super Amazing Widget'; }
    )) {
    echo 'In the array' . PHP_EOL;
}