我想要下面的代码做的是循环遍历
$check_query
数组,找到所有包含单词 standard 的值并将它们推入数组中。我也想对包含升级的字符串执行此操作。
示例 $range_array 应返回 ['standard-186', 'standard-184];
$check_query = ['standard-186', 'upgrade-186', 'standard-184', 'upgrade-184'];
$range_array = [];
$spec_array = [];
foreach($check_query as $value) {
if (in_array("standard", $value)) {
array_push($range_array, $value);
}
elseif (in_array("upgrade", $value)) {
array_push($spec_array, $value);
} else {
// Nothing
}
}
echo $range_array;
echo $spec_array;
这可以使用
array_filter()
在一行中完成
<?php
$check_query = ['standard-186', 'upgrade-186', 'standard-184', 'upgrade-184'];
$value = "standard";
$range_array = array_filter($check_query, function($a) use($value){return (stripos($a, $value)!==false);});
print_r($range_array);
输出
Array ( [0] => standard-186 [2] => standard-184 )
对于
$spec_array
,使用不同的 $value
值做同样的事情。
对于 PHP 8,您可以使用
str_contains()
代替 stripos()
:
$res = array_filter($check_query, function($a) use($value){return str_contains($a, $value);});
print_r($res);
在循环中,
$value
包含一个字符串,因此您必须检查您的字符串是否是该字符串的一部分。
$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);
} else {
// Nothing
}
}
输出:
声明两个单独的输出变量可能没有什么好处。要将数据分为两组,只需隔离每个字符串中分隔符之前的字母并将值推入该组/子数组即可。
在另一个答案下的评论中,您要求仅存储每组中的数字部分。
sscanf()
是解析每个字符串并返回两个部分的完美工具。通过在格式参数中使用 %d
,数字子字符串将被转换为整数。
代码:(演示)
$result = [];
foreach ($check_query as $v) {
[$group, $result[$group][]] = sscanf($v, '%[^-]-%d');
# ^^^^^^^^^^^^^^^^^-push number into group's subarray
#^^^^^^-isolate leading string as a temporary variable
}
var_export($result);
输出:
array (
'standard' =>
array (
0 => 186,
1 => 184,
),
'upgrade' =>
array (
0 => 186,
1 => 184,
),
)