1

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

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() 和多维数组

4

4 回答 4

5

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

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

活生生的例子

于 2012-04-16T20:00:57.157 回答
0
foreach ($array as $item) {
    if ($item["Product"] == "Super Amazing Widget") {
        echo "in the array";
        break;
    }
}
于 2012-04-16T20:04:02.617 回答
0

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

if(array_filter(
    $array, 
    function($val) { return $val['Product'] === 'Super Amazing Widget'; }
    )) {
    echo 'In the array' . PHP_EOL;
}
于 2012-04-16T21:04:26.773 回答
0

这是不使用循环:

$filt = array_filter($array, create_function('$val',
                                'return $val["Product"] === "Super Amazing Widget";'));
if (!empty($filt)) {
    echo "In The Array\n";
}
于 2012-04-16T20:12:22.543 回答