PHP在子数组中拆分数组

时间:2015-04-22 09:06:24

标签: php arrays

注意,array_chunk不是我的解决方案(在我看来)。

我有一个大约150,000个元素的数组

Array
(
    [0] => Array
        (
            [name] => Danilo
            [phone] => 33568
        )

    [1] => Array
        (
            [name] => Alessandro
            [phone] => 392222
        )

    [2] => Array
        (
            [name] => Alex
            [phone] => 3922
        )

    [3] => Array
        (
            [name] => Capa
            [phone] => 392
        )

)

等等。我会将这个数组分成几个数组,例如每个3.000个元素。

我看到了array_chunk,但它返回了一个包含多个子数组的数组。

我需要几个子阵列将它们存储在数据库中并在将来详细说明。

我疯狂地写一个从$ temp开始的片段并将其分成更小的数组。

$size_chunks = 1;

        $temp = array_chunk($recipients, $size_chunks);

        foreach ($temp as $key=>$value)
        {
            if ($key<$size_chunks)
            {
                $to_store[] = $temp[$key];  
            }
            //print_r($to_store);
            // pseudo sql
            // INSERT INTO table (sub_recipient) VALUES ($to_store);
            $to_store = array();

        }

因此,每次for循环结束时,减少temp,存储$ to_store数组并重新启动其他块。

非常感谢。

我的示例chunk中的PS == 1,因为起始数组很小......;)

以我的chunk = 1为例,我需要从数组启动这4个数组:

Array
(
    [0] => Array
        (
            [name] => Danilo
            [phone] => 33568
        )
)

Array
    (
        [0] => Array
            (
                [name] => Alessandro
                [phone] => 39222
            )
    )

Array
        (
            [0] => Array
                (
                    [name] => Alex
                    [phone] => 39222
                )
        )

Array
        (
            [0] => Array
                (
                    [name] => Capa
                    [phone] => 392
                )
        )

另一个解释

1 - 使用15.000个元素的起始数组和3.000的块,我需要输出(15.000 / 3.000)= 5个数组。我将它们保存在数据库中,因此在DB中我将有5行(每个数组都有一行)。

2 - 使用4个元素的起始数组和1的块,我需要输出(4/1)= 4个数组。我将它们保存在数据库中,因此在DB中我将有4行(每个数组都有一行)。

2 个答案:

答案 0 :(得分:2)

array_chunks()已经做了你想要的,你只需要保存它:

$chunks = array_chunk($array, $size_chunks);

foreach ($chunks as $chunk) {
    // save $chunk to your database
}

答案 1 :(得分:0)

$recipients = Array(
                    Array("fdbvfdb","dsacsdcds"),
                    Array("hrloo","dacdsc"),
                    Array("dcsdc","adcsd"),
                    Array("dcsdc","adcsd")
                );
$total = count($recipients);//count 150.000 elements
$i=1;
for($i=0;$i<$total;$i++){
$O = array_slice($recipients,$i,1);
print_r($O);
//Your insert/Save code
}

您可以使用此代码,使用 Array_Slice