PHP按前缀子串对扁平数组元素分组的代码问题咨询
问题排查
- 函数使用错误:
in_array()函数的作用是判断给定值是否存在于数组中,要求第二个参数必须为数组类型。你的代码里传入的第二个参数是字符串类型的$value,逻辑完全错误。要判断字符串是否包含指定子串,PHP 8.0+可使用str_contains()函数,低版本PHP可使用strpos()做判断。 - 输出方式错误:PHP中不能直接用
echo输出数组,否则只会输出Array字符串并抛出警告,要查看数组内容需使用print_r()或var_dump()函数。
正确实现方案
PHP 8.0+ 版本(官方推荐)
$check_query = ['standard-186', 'upgrade-186', 'standard-184', 'upgrade-184']; $range_array = []; $spec_array = []; foreach($check_query as $value) { if (str_contains($value, "standard")) { array_push($range_array, $value); } elseif (str_contains($value, "upgrade")) { array_push($spec_array, $value); } } // 输出数组内容 print_r($range_array); print_r($spec_array);
PHP 7及更低版本兼容方案
使用strpos做判断,注意必须用!== false做严格比较,避免子串出现在字符串开头时判断逻辑失效:
$check_query = ['standard-186', 'upgrade-186', 'standard-184', 'upgrade-184']; $range_array = []; $spec_array = []; foreach($check_query as $value) { if (strpos($value, "standard") !== false) { array_push($range_array, $value); } elseif (strpos($value, "upgrade") !== false) { array_push($spec_array, $value); } } // 输出数组内容 print_r($range_array); print_r($spec_array);
运行后$range_array返回结果为预期的['standard-186', 'standard-184'],$spec_array返回结果为['upgrade-186', 'upgrade-184']。
内容的提问来源于stack exchange,提问作者monsaic123
相关产品推荐
相关产品推荐

