foreach循环提取和分组子数组

时间:2018-05-23 08:32:04

标签: php arrays

阵列:

    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个变量创建数据库记录。

foreach#1:

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

foreach#2:

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

直到它完成第一个子数组然后转到第二个数组:

foreach#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),因此如果分成块,我们应该为每个content子阵列获得12个数组块。

2 个答案:

答案 0 :(得分:1)

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

api/employees/1
{
        "Id" : 1
        "Name" : "Joe Bloggs",
        "Department" : "IT"
}

api/employees/1
{
        "Name" : "Joe Bloggs",
        "Department" : "IT"
}

将输出:

<?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;

答案 1 :(得分:1)

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

                )

        )

)