繁体   English   中英

PHP in_array function 找不到值

[英]PHP in_array function doesn't find value

我有这个 PHP 变量:

$values = $response->getValues();

打印这个数组:

Array ( [0] => Array ( [0] => 16777439-3 ) [1] => Array ( [0] => 17425847-3 ) )

然后我有这段代码可以在该数组中找到一个值:

if (in_array("16777439-3", $values)) {

    echo "Is in array";

}else{

    echo "Isn't in array";

}

但它总是返回“不在数组中

我还尝试将我的原始变量转换为:

$array2 = json_decode(json_encode($values), true);

但我也得到了同样的回报。

您的值数组如下所示:

[
  0 => [
         0 => "16777439-3"
       ],
  1 => [
         0 => "17425847-3"
       ]
]

您的顶级元素是 arrays 本身。 in_array不能像这样进行嵌套搜索。 只有当您的阵列只是

[
  0 => "16777439-3"
  1 => "17425847-3"
]

要么改变你的结构不使用嵌套数组,要么实现自定义搜索 function:

function custom_in_array($search, $haystack){
    foreach($haystack as $key => $value)
    {
        if(in_array($search, $value))
            return true;
    }

    return false;
}

$values 是一个 arrays 数组,而不是字符串数组。

为了说明,请尝试:

if (in_array("16777439-3", $values[0] )) {

    echo "Is in array";

}else{

    echo "Isn't in array";

}

您必须进行一些处理才能将 $response->getValues() 转换为字符串数组

您有一个多维数组,因此只需使用array_column提取0列:

if (in_array("16777439-3", array_column($values, 0))) {
    echo "Is in array";
} else {
    echo "Isn't in array";
}

或使用array_merge展平数组:

if (in_array("16777439-3", array_merge(...$array))) {
    echo "Is in array";
} else {
    echo "Isn't in array";
}

此外,检查isset是否设置更快,因此您可以重新索引0值并检查是否设置了该索引:

if (isset(array_column($values, null, 0)["16777439-3"])) {
    echo "Is in array";
} else {
    echo "Isn't in array";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM