代码之家  ›  专栏  ›  技术社区  ›  Ricardo

foreach循环提取和分组子数组

  •  0
  • Ricardo  · 技术社区  · 6 年前

    数组:

        Array
        (
            [0] => Array
                (
                    [date] => 2018-05-23
                    [content] => Array
                        (
                            [0] => Array
                                (
                                    [0] => AAAAAA
                                    [1] => BBBBBB
                                    [2] => CCCCCC
                                    [3] => DDDDDD
                                    [4] => EEEEEE
                                    [5] => FFFFFF
                                    [6] => GGGGGG
                                    [7] => HHHHHH
                                    [8] => IIIIII
                                    [9] => JJJJJJ
                                )
                        )
                )
    
            [1] => Array
                (
                    [date] => 2018-05-22
                    [content] => Array
                        (
                            [0] => Array
                                (
                                    [0] => KKKKKK
                                    [1] => LLLLLL
                                    [2] => MMMMMM
                                    [3] => NNNNNN
                                    ...
    

    我需要能够创建一个 foreach 将从3个变量创建数据库记录的循环。

    前臂 第1类:

    $date = $array['content']['date']; //2018-05-23
    $headline = $array['content'][0][$key]; // AAAAAA
    $content = $array['content'][0][$key]; // BBBBBB
    

    前臂 第2类:

    $date = $array['content']['date']; //2018-05-23
    $headline = $array['content'][0][$key]; // CCCCCC
    $content = $array['content'][0][$key]; // DDDDDD
    

    直到第一个子数组结束,然后转到第二个数组:

    前臂 第6类:

    $date = $array['content']['date']; //2018-05-22
    $headline = $array['content'][0][$key]; // KKKKKK
    $content = $array['content'][0][$key]; // LLLLLL
    

    我一直在尝试用 array_chunk 没有成功,然后我尝试编写一个小的修复程序来正确地订购数组:

            if ($x <= 10) {
                    if ( $a < 2 ) {
                        $a++;
                    } else {
                        $x++;
                        $a = 1;
                    }
                $res[$i]['content'][$x][] = ltrim($text);
            } else {
                $res[$i]['content'][$x][] = ltrim($text);
                $x = 0;
            }
    

    结果:

    [date] => 2018-05-23
                [content] => Array
                    (
                        [0] => Array
                            (
                                [0] => AAAAAA
                                [1] => BBBBBB
                            )
    
                        [1] => Array
                            (
                                [0] => CCCCCC
                                [1] => DDDDDD
                            )
    
                        [2] => Array
                            (
                                [0] => EEEEEE
                                [1] => FFFFFF
                            )
    
                        [3] => Array
                            (
                                [0] => GGGGGG
                                [1] => HHHHHH
                            )
    

    它对第一个数组有效,但所有其他数组都失去了顺序,分类不正确。

    有什么办法可以创造这个吗?

    编辑: content 将始终有24条记录(0-23),因此如果划分为块,我们应该为每个 内容 子数组。

    2 回复  |  直到 6 年前
        1
  •  1
  •   HTMHell    6 年前

    我不确定你的数据库结构是什么样子的,因为你没有提到,但是你可以这样做:

    <?php
    $array = [
        [
            "date" => "date",
            "content" => [["A", "B", "C"]]
        ],
        [
            "date" => "date",
            "content" => [["E", "F", "G", "H"]]
        ],
    ];
    
    $sql = "INSERT INTO table (content, date) VALUES ";
    
    foreach ($array as $key => $item) {
        $content = $item["content"][0];
        for ($i = 0; $i < count($content); $i += 2) {
            $letters = $content[$i];
    
            if (isset($content[$i + 1])) {
                $letters .= $content[$i + 1];
            }
    
            $sql .= "('$letters', '$item[date]'),";
        }
    }
    
    $sql = rtrim($sql, ",") . ";";
    
    echo $sql;
    

    将输出:

    INSERT INTO table (content, date) VALUES ('AB', 'date'),('C', 'date'),('EF', 'date'),('GH', 'date');
    
        2
  •  1
  •   nice_dev    6 年前
    <?php
    
    $collection = 
            array
                (
                    array
                        (
                            'date' => '2018-05-23',
                            'content' => array
                                (
                                    array
                                        (
                                            'AAAAAA',
                                            'BBBBBB',
                                            'CCCCCC',
                                            'DDDDDD',
                                            'EEEEEE',
                                            'FFFFFF',
                                            'GGGGGG',
                                            'HHHHHH',
                                            'IIIIII',
                                            'JJJJJJ'
                                        )
                                )
                        ),
                    array
                        (
                            'date' => '2018-05-22',
                            'content' => array
                                (
                                    array
                                        (
                                            'KKKKKK',
                                            'LLLLLL',
                                            'MMMMMM',
                                            'NNNNNN'
                                        )
                                 )
                        )
                );
    
    
    function getChunks($data){
        $result = array();
        $length = count($data);
    
        for($i=0;$i<$length;$i += 2){
            $result[] = array($data[$i],$data[$i+1]);
        }
    
        return $result;
    }
    
    function groupContentByDate($collection){
        $result = array();
    
        foreach($collection as $each_data){
            $result[$each_data['date']] = array('content' => array());
            foreach($each_data['content'] as $each_content){
                $result[$each_data['date']]['content'] = array_merge($result[$each_data['date']]['content'],getChunks($each_content));
            }
        }
    
        return $result;
    }
    
    
    echo "<pre>";
    print_r(groupContentByDate($collection));
    

    产量

    Array
    (
        [2018-05-23] => Array
            (
                [content] => Array
                    (
                        [0] => Array
                            (
                                [0] => AAAAAA
                                [1] => BBBBBB
                            )
    
                        [1] => Array
                            (
                                [0] => CCCCCC
                                [1] => DDDDDD
                            )
    
                        [2] => Array
                            (
                                [0] => EEEEEE
                                [1] => FFFFFF
                            )
    
                        [3] => Array
                            (
                                [0] => GGGGGG
                                [1] => HHHHHH
                            )
    
                        [4] => Array
                            (
                                [0] => IIIIII
                                [1] => JJJJJJ
                            )
    
                    )
    
            )
    
        [2018-05-22] => Array
            (
                [content] => Array
                    (
                        [0] => Array
                            (
                                [0] => KKKKKK
                                [1] => LLLLLL
                            )
    
                        [1] => Array
                            (
                                [0] => MMMMMM
                                [1] => NNNNNN
                            )
    
                    )
    
            )
    
    )