在遍历然后在PHP中之前对数组项进行分组

时间:2018-07-02 16:56:25

标签: php sql arrays

我有一个无法轻易排序的数组。我有一个值列表,然后爆炸成一个数组,这给我留下了类似的东西;

  • 11:54
  • 11:120
  • 11:53
  • 22:20
  • 43:11
  • 55:199
  • 22:83

:的第一部分是类别标题,第二个值是子类别。

所以我现在想遍历这个数组,将所有需要注意的东西放在一起。因此,将所有类别标题归为一组,以便我可以遍历那些将子类别放回以逗号分隔的列表中(用作SQL中的IN语句)

在上面的示例中,将产生类似的内容;

$inStatement1 = "(54,120,53)"
$inStatement2 = "(20,83)"
$inStatement3 = "(11)"
$inStatement4 = "(199)"

所以11s,22s等所有子猫都被分组等等。

我只是无法获得在原始列表中循环并能够将属于该组的所有子类别组合在一起的逻辑。

希望如此吗?!

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用关联数组来存储类别和元素

$strings = array(
"11:54",
"11:120",
"11:53",
"22:20",
"43:11",
"55:199",
"22:83"
);

$categories = array();

foreach ($strings as $string) {
    $exploded = explode(':',$string);
    $head = $exploded[0];
    $sub = $exploded[1];

    if (!isset($categories[$head])) $categories[$head] = array();
    $categories[$head][] = $sub;
}

print_r($categories);

这将产生:

Array
(
    [11] => Array
        (
            [0] => 54
            [1] => 120
            [2] => 53
        )

    [22] => Array
        (
            [0] => 20
            [1] => 83
        )

    [43] => Array
        (
            [0] => 11
        )

    [55] => Array
        (
            [0] => 199
        )

)

然后您可以使用implode将组合为所需的字符串

$imploded = array();
foreach ($categories as $head => $subs) {
    $imploded[$head] = '"('.implode(',',$subs).')"';
}

print_r($imploded);

这将为您提供字符串:

Array
(
    [11] => "(54,120,53)"
    [22] => "(20,83)"
    [43] => "(11)"
    [55] => "(199)"
)