You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP判断字符串是否存在于数组集合中问题求助

PHP数组匹配失败的问题解决

现有代码与输出

获取颜色数据的代码:

$colourCheckedArr = $colour_handler->pullCheckedcolour($colour_id); 
foreach ($colourCheckedArr as $colourCheckedArrs) {      
    $list_ = $colourCheckedArrs;                                
    $array = json_encode($list_);                                 
    echo $array . "\n";                              
}

输出结果:

{"colours":"red"} {"colours":"blue"} {"colours":"green"};

遇到的问题

使用参考代码判断颜色是否存在时,始终返回“No Match found”:

$needle = "red";
if (in_array($needle, array_column($array, "colours"))) {
    echo "Match found";
    return true;
} else {
    echo "No match found";
    return false;
}

问题原因

  1. $array是循环中每次覆盖后的JSON字符串,而非包含所有颜色的PHP二维数组,最后仅保留了最后一个元素的JSON({"colours":"green"})。
  2. array_column()要求传入PHP二维数组,无法处理JSON字符串,因此无法提取出colours字段的值进行匹配。

修正方案

直接使用pullCheckedcolour返回的原始PHP数组进行判断,无需转JSON:

// 获取原始颜色数组
$colourCheckedArr = $colour_handler->pullCheckedcolour($colour_id); 

$needle = "red";
// 从二维数组中提取所有colours值,生成一维数组
$coloursList = array_column($colourCheckedArr, "colours");

if (in_array($needle, $coloursList)) {
    echo "Match found";
    return true;
} else {
    echo "No match found";
    return false;
}

特殊情况处理

如果pullCheckedcolour返回的元素是对象而非数组,先将对象转为数组:

$colourCheckedArr = array_map(function($item) {
    return (array)$item;
}, $colour_handler->pullCheckedcolour($colour_id));

// 后续判断代码同上

内容的提问来源于stack exchange,提问作者8host

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:00:54