如何检查数组中是否存在值?

时间:2018-11-30 15:38:54

标签: php arrays

我对PHP还是很陌生...我试图检查我的$Session array中是否存在一个值,然后根据该值显示内容,但是即使在我运行时,它始终显示“未找到匹配项”知道该值确实存在于数组中。

这是我数组的print_r

Array (
    [0] => Array ( 
        [0] => SIEMENS 
        [1] => 523-096-32 
        [2] => 1
        [3] => New 
    ) 
)

当我这样做时:

$array = $_SESSION['arr'];

if( in_array( "523-096-32" , $array ) ){
    echo "Match found";
}else{
    echo "Match not found";
}

结果是“找不到匹配项”。

我也尝试用in_array替换array_key_exists,但结果却相同。

我的问题是:我要去哪里错了,如何解决它以显示“找到匹配项”?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:-1)

使用in_array("523-096-32", $array[0])作为您问题的注释会起作用,但是根据$_SESSION['arr']应该做什么,它可能不是最佳解决方案。检查该值的最佳方法取决于$_SESSION['arr']是否应该是多维数组。

似乎$_SESSION['arr']中的数组是代表单个项目的一组值。如果$_SESSION['arr']打算容纳一组这些项目,尽管您显示的示例中只有一个,则在$array[0]中查找只会检查第一个项目。相反,您可以对其进行迭代,并检查每个项目的值,直到找到(或找不到)为止。

$found = false;
foreach ($_SESSION['arr'] as $item) {
    if ($item[1] === "523-096-32") {
        $found = true;
        break;
    }
}
echo $found ? 'Match found' : 'Match not found';

如果$_SESSION['arr']中的项目结构不一致,则对$item[1]的引用将不准确,您应改用in_array

if (in_array("523-096-32", $item)) { ...

如果$_SESSION['arr']仅深一层,则不需要使用递归函数来查找匹配项。


另一方面,如果$_SESSION['arr']仅是一个数组,而不是像其中那样包含另一个数组的数组,则可能分配错误,例如

$_SESSION['arr'][] = ['SIEMENS', '523-096-32', '1', 'New'];

代替

$_SESSION['arr'] = ['SIEMENS', '523-096-32', '1', 'New'];

如果像此处的第二个示例一样直接分配它,则可以像尝试那样使用in_array进行操作。