php 基于前导子字符串对平面数组的值进行分组

fdx2calv  于 9个月前  发布在  PHP
关注(0)|答案(3)|浏览(100)

我希望下面的代码做的是循环遍历$check_query数组,找到所有包含单词standard的值并将它们推入数组。我还希望对包含upgrade的字符串执行此操作。示例$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;

字符串

vbopmzt1

vbopmzt11#

这可以通过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);

6yjfywim

6yjfywim2#

在循环中,$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
    }
}

字符串
产出:


的数据


avwztpqn

avwztpqn3#

声明两个独立的输出变量可能没有什么好处。要将数据分成两组,只需将每个字符串中的字母分隔开,然后将值推入该组/子数组。
在另一个答案下的评论中,你要求只存储每组中的数字部分。sscanf()是解析每个字符串并返回两部分的完美工具。通过在format参数中使用%d,数字子字符串将被转换为整数。
产品编号:(Demo

$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,
  ),
)

相关问题