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; }
问题原因
$array是循环中每次覆盖后的JSON字符串,而非包含所有颜色的PHP二维数组,最后仅保留了最后一个元素的JSON({"colours":"green"})。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
相关产品推荐
相关产品推荐

