【问题标题】:How to combine array with same element value如何组合具有相同元素值的数组
【发布时间】:2020-12-23 23:37:38
【问题描述】:

我的数组数据:

$opt_val = 大批 ( [0] => 数组 ( [0] => 数组 ( [0] => 0|0|0|P3D [1] => 0|0|1|P4D [2] => 0|0|2|P5D ) [1] => 数组 ( [0] => 0|1|0|P3D [1] => 0|1|1|P4D [2] => 0|1|2|P5D ) ) [1] => 数组 ( [0] => 数组 ( [0] => 1|0|0|P3D [1] => 1|0|1|P4D [2] => 1|0|2|P5D ) [1] => 数组 ( [0] => 1|1|0|P3D [1] => 1|1|1|P4D [2] => 1|1|2|P5D ) ) )

我想用结果加入上面的数组:

大批 ( [0] => 数组 ( [0] => 0|0|0|P3D#0|1|0|P3D(来自 Array[0][0][0]#Array[0][1][0]) [1] => 0|0|1|P4D#0|1|1|P4D [2] => 0|0|2|P5D#0|1|2|P5D ) [1] => 数组 ( [0] => 1|0|0|P3D#1|1|0|P3D(来自 Array[1][0][0]#Array[1][1][0]) [1] => 1|0|1|P4D#1|1|1|P4D [2] => 1|0|2|P5D#1|1|2|P5D ) )

我的代码

for ($ov = 0; $ov < count($opt_val); $ov++) {
    for ($ovi = 0; $ovi < count($opt_val[$ov]); $ovi++) {
        for ($iv = 0; $iv < count($opt_val[$ov][$iv]); $iv++) {
            $im_opt_val[$iv] = implode("#", $opt_val[$ov][$ovi]);
        }
        $impl_opt_val[$ov] = $im_opt_val;
    }
}

谢谢

【问题讨论】:

  • 我认为这不是合并数组,而是从第一个数组的第三个元素组合数组成为上面的第二个示例
  • 我想我明白了——你想组合最里面的数组,不管重复,嵌套只有一层嵌套。手动循环是我能想到的最好的事情。我会创建一个函数来提取某个嵌套级别的数组值,在循环中调用它来构建你的结果数组。

标签: php arrays multidimensional-array


【解决方案1】:

下面的代码 sn-p 应该可以解决问题。

<?php

declare(strict_types=1);

$opt_val = [
    [
        [
            '0|0|0|P3D',
            '0|0|1|P4D',
            '0|0|2|P5D',
        ],
        [
            '0|1|0|P3D',
            '0|1|1|P4D',
            '0|1|2|P5D',
        ],
    ],
    [
        [
            '1|0|0|P3D',
            '1|0|1|P4D',
            '1|0|2|P5D',
        ],
        [
            '1|1|0|P3D',
            '1|1|1|P4D',
            '1|1|2|P5D',
        ],
    ],
];

$result = [];
foreach ($opt_val as $outerArrayKey => $outerArray) {
    foreach ($outerArray as $innerArray) {
        foreach ($innerArray as $innerArrayKey => $innerArrayElement) {
            if (!isset($result[$outerArrayKey][$innerArrayKey])) {
                $result[$outerArrayKey][$innerArrayKey] = $innerArrayElement;
            } else {
                $result[$outerArrayKey][$innerArrayKey] .= '#'.$innerArrayElement;
            }
        }
    }
}

var_dump($result);

输出将是:

array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(19) "0|0|0|P3D#0|1|0|P3D"
    [1]=>
    string(19) "0|0|1|P4D#0|1|1|P4D"
    [2]=>
    string(19) "0|0|2|P5D#0|1|2|P5D"
  }
  [1]=>
  array(3) {
    [0]=>
    string(19) "1|0|0|P3D#1|1|0|P3D"
    [1]=>
    string(19) "1|0|1|P4D#1|1|1|P4D"
    [2]=>
    string(19) "1|0|2|P5D#1|1|2|P5D"
  }
}

【讨论】:

    【解决方案2】:

    我希望这对你有用:

    $finalFinalArray = [];
    foreach($outerArray as $key => $innerArray){
      $finalArray = [];
      $inQueueArray = [];
      foreach ($innerArray as $inInnerArray) {
        $inQueueArray = array_merge($inQueueArray, $inInnerArray);
      }
      // Now, inner array is merged
      for ($i = 0; $i < count($inQueueArray); $i++){
        $finalArray[] = $inQueueArray[$i] + "#" + $inQueueArray[$i+3];
      }
      $finalFinalArray[] = $finalArray;
    }
    var_dump($finalFinalArray);
    

    没有测试!

    【讨论】:

    • 感谢您的解决方案,但不幸的是它仍然无法正常工作。我有结果 Array ( [0] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 ) [1] => Array ( [0] => 2 [1] => 2 [2] => 2 [3] => 2 [4] => 2))
    • 已编辑,再次测试
    • 感谢您的编辑,但出现错误:注意:遇到格式不正确的数值
    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2020-04-07
    • 2017-05-29
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多