在循环之前对数组项进行分组,然后在PHP中进行分组

在循环之前对数组项进行分组,然后在PHP中进行分组,php,sql,arrays,Php,Sql,Arrays,我有一个数组,我无法轻松排序。我有一个值列表,我将其分解成一个数组,这会给我留下类似的东西 $inStatement1 = "(54,120,53)" $inStatement2 = "(20,83)" $inStatement3 = "(11)" $inStatement4 = "(199)" 11:54 11:120 11:53 22:20 43:11 55:199 22:83 :前面的第一部分是类别标题,第二部分是子类别 所以我现在想循环这个数组,把喜欢的东西放在一起。因此,将所有类

我有一个数组,我无法轻松排序。我有一个值列表,我将其分解成一个数组,这会给我留下类似的东西

$inStatement1 = "(54,120,53)"
$inStatement2 = "(20,83)"
$inStatement3 = "(11)"
$inStatement4 = "(199)"
  • 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)"
因此,所有11岁组的子猫,22岁组的子猫,等等

我只是无法让逻辑循环通过原始列表,并能够将属于该组的所有子类别组合在一起

希望这有道理


有什么想法吗??谢谢

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

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

)
然后,可以使用“内爆”将字符串组合成所需的字符串

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

该死这看起来是一个很好的解决方案!!明天早上我回来工作时,我会试一试,并会进行更新,但谢谢大家!迫不及待-必须测试它!非常好,非常感谢塞缪尔!