【问题标题】:Group array items before looping through then in PHP在 PHP 中循环之前对数组项进行分组
【发布时间】:2018-07-02 16:56:25
【问题描述】:

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

  • 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分组等等。

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

希望这是有道理的?!

有什么想法吗?谢谢!

【问题讨论】:

    标签: php sql arrays


    【解决方案1】:

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

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

    【讨论】:

    • 该死的......这看起来是一个很好的解决方案!早上我回来工作时会试一试并会更新 - 但到目前为止谢谢!
    • 不能等待 - 必须测试它!完美运行,非常感谢 Samuel!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2021-01-30
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2018-09-09
    • 2022-11-17
    相关资源
    最近更新 更多