【问题标题】:PHP Explode multidimensional arraysPHP 分解多维数组
【发布时间】:2021-03-30 04:19:18
【问题描述】:

我有多个数组,我试图分解并划分里面的所有信息。出于某种原因,当我这样做时,我会丢失有关主数组的信息。

数组

[0] => Array (
    [0] => 2020-11-01 / 2020-11-30
    [1] => 2020-12-01 / 2020-12-31
    )
[1] => Array (
    [0] => 2020-11-01 / 2020-11-30
    [1] => 2020-12-01 / 2020-12-31
    )

我使用了以下代码:

foreach ($list as $line) {
    foreach ($line as $text) {
        $parts[] = explode(' / ', $text);
    }
}

print_r($parts) 将返回以下内容:

[0] => Array (
    [0] => 2020-11-01
    [1] => 2020-11-30
    )
[1] => Array (
    [0] => 2020-12-01
    [1] => 2020-12-31
    )
[2] => Array (
    [0] => 2020-11-01
    [1] => 2020-11-30
    )
[3] => Array (
    [0] => 2020-12-01
    [1] => 2020-12-31
    )

但不幸的是,这不是我想要的,我需要的是这个:

[0] => Array (
    [0] => Array (
        [0] => 2020-11-01
        [1] => 2020-11-30
        )
    [1] => Array (
        [0] => 2020-12-01
        [1] => 2020-12-31
        )
    )
[1] => Array (
    [0] => Array (
        [0] => 2020-11-01
        [1] => 2020-11-30
        )
    [1] => Array (
        [0] => 2020-12-01
        [1] => 2020-12-31
        )
    )

我四处搜索,但没有找到一个简单的方法。希望有人能提供帮助。谢谢!

【问题讨论】:

  • 什么是$z变量?
  • 那是个错误,抱歉。已经修复了:)

标签: php arrays multidimensional-array explode


【解决方案1】:

如果您真的想保持原始数组完好无损。一种解决方案是使用另一个数组将您的爆炸数组放入其中:

<?php

$list = [
  [
    "2020-11-01 / 2020-11-30",
    "2020-11-01 / 2020-11-30",
  ],
  [
    "2020-11-01 / 2020-11-30",
    "2020-11-01 / 2020-11-30",
  ]
];

$newArray = [];
foreach ($list as $line) {
  $parts = [];
  foreach ($line as $text) {
      $parts[] = explode(' / ', $text);
  }
  $newArray[] = $parts;
}
var_dump($newArray);

/*
array (size=2)
  0 => 
    array (size=2)
      0 => 
        array (size=2)
          0 => string '2020-11-01' (length=10)
          1 => string '2020-11-30' (length=10)
      1 => 
        array (size=2)
          0 => string '2020-11-01' (length=10)
          1 => string '2020-11-30' (length=10)
  1 => 
    array (size=2)
      0 => 
        array (size=2)
          0 => string '2020-11-01' (length=10)
          1 => string '2020-11-30' (length=10)
      1 => 
        array (size=2)
          0 => string '2020-11-01' (length=10)
          1 => string '2020-11-30' (length=10)
*/

【讨论】:

    【解决方案2】:

    您正在创建一个新数组,而不是写入您正在爆炸的相同索引,您可以这样做:

    $arr = [
        0 => [
            0 => '2020-11-01 / 2020-11-30',
            1 => '2020-12-01 / 2020-12-31',
        ],
        1 => [
            0 => '2020-11-01 / 2020-11-30',
            1 => '2020-12-01 / 2020-12-31',
        ]
    ];
    
    
    foreach ($arr as $bulkIndex => $bulks) {
        foreach ($bulks as $lineIndex => $line) {
            $arr[$bulkIndex][$lineIndex] = explode(' / ', $line);
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用嵌套的array_map 来分解每个值中的数据,从而达到您想要的结果:

      $data = array(
        array(
          "2020-11-01 / 2020-11-30",
          "2020-11-01 / 2020-11-30",
        ),
        array(
          "2020-11-01 / 2020-11-30",
          "2020-11-01 / 2020-11-30",
        )
      );
      
      $result = array_map(function ($a) { 
          return array_map(function ($v) { 
              return explode(' / ', $v ); 
          }, $a); 
      }, $data);
      print_r($result);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-26
        • 1970-01-01
        • 1970-01-01
        • 2019-06-13
        • 1970-01-01
        • 2013-04-12
        • 1970-01-01
        相关资源
        最近更新 更多