【问题标题】:Merging arrays with different dimensions in PHP在PHP中合并具有不同维度的数组
【发布时间】:2018-10-02 02:49:15
【问题描述】:

我有 2 个不同维度的不同数组,我需要合并它们以获得具有特定此结构的结果:

第一个:

Array
(
    [0] => Array
        (
            [0] => 2017-11-03
            [1] => 2017-11-05
            [2] => 1
        )

    [1] => Array
        (
            [0] => 2017-11-23
            [1] => 2017-11-25
            [2] => 1
        )

)

第二个:

Array
(
    [0] => 2017-12-26
    [1] => 2018-01-30
)

结果应该是:

Array
    (
        [0] => Array
            (
                [0] => 2017-11-03
                [1] => 2017-11-05
                [2] => 1
            )

        [1] => Array
            (
                [0] => 2017-11-23
                [1] => 2017-11-25
                [2] => 1
            )

        [2] => Array
            (
                [0] =>2017-12-26
                [1] => 2018-01-30
                [2] => 1
            )

    )

我尝试使用 array_merge 但它不起作用,因为它们的维度不同。我还需要第二个选项卡中的元素([2] => 1)。

【问题讨论】:

  • 你需要为数组中的缺失元素声明默认值
  • 对不起,我不明白,如果你的意思是[2] => 1,我不使用它并不重要
  • 我已经发布了一个解决方案。两种方式都可以尝试一下。

标签: php merge


【解决方案1】:
<?php

$array=Array
(
    0 => Array
    (
        0 => '2017-11-03',
            1 => '2017-11-05',
            2 => '1',
        ),

    1 => Array
(
    0=> '2017-11-23',
            1 => '2017-11-25',
            2 => '1'
        ),


);

$arraySmall=Array
(
    0 => '2017-12-26',
    1 => '2018-01-30'
);


array_push($arraySmall, "1");
array_push($array, $arraySmall);
echo'<pre>';
print_r($array);

输出是:

Array
(
    [0] => Array
        (
            [0] => 2017-11-03
            [1] => 2017-11-05
            [2] => 1
        )

    [1] => Array
        (
            [0] => 2017-11-23
            [1] => 2017-11-25
            [2] => 1
        )

    [2] => Array
        (
            [0] => 2017-12-26
            [1] => 2018-01-30
            [2] => 1
        )

)

即使没有这条线array_push($arraySmall, "1");,这种方式也可以工作 你可以试一试。为了“合并”,您需要相同的大小,但对于“推送”,您不需要。因此,如果您赞扬我告诉您的那一行,输出将如下所示:

Array
(
    [0] => Array
        (
            [0] => 2017-11-03
            [1] => 2017-11-05
            [2] => 1
        )

    [1] => Array
        (
            [0] => 2017-11-23
            [1] => 2017-11-25
            [2] => 1
        )

    [2] => Array
        (
            [0] => 2017-12-26
            [1] => 2018-01-30
        )

)

【讨论】:

  • 谢谢它是否有效,两个数组之一是空的?
  • 奇怪,因为当 $array 为空时似乎有问题
  • 我刚试过。如果 $array 为空但存在(不要删除它只是清空它),它将在数组内创建一个新记录,该记录将是位置 0 中的 $arraySmall
【解决方案2】:

您描述的是附加,而不是合并。试试这个:

$arraySecond[] = 1;           // This adds [2]=> 1
$arrayFirst[] = $arraySecond; // This adds second array to end of first

【讨论】:

    【解决方案3】:

    对于您给定的示例:

    $x = ... // first array [2 dimensions]
    $y = ... // second array [1 dimension]
    
    $y = array_merge($y, array_diff($x[0], $y)); // add missing '1' to $y or any other key that are present in elements of $x and have to be added to $y
    
    $x[] = $y; // append the 1-dim array as the new element in $x
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 2014-04-22
      • 2015-03-21
      • 2016-06-09
      • 2020-01-17
      • 2018-10-22
      • 2013-07-18
      相关资源
      最近更新 更多