将数组合并为一个更简单的数组(PHP)

时间:2015-06-15 21:52:36

标签: php arrays multidimensional-array

我有一个看起来像这样的数组。我正在考虑将其缩小为一个更简单的数组(见下文),我将如何解决这个问题?

array(1552) {
  [0]=>
  array(2) {
    [0]=>
    string(4) "3792"
    [1]=>
    string(2) "99"
  }
  [1]=>
  array(2) {
    [0]=>
    string(4) "3792"
    [1]=>
    string(3) "100"
  }
  [2]=>
  array(2) {
    [0]=>
    string(4) "3792"
    [1]=>
    string(3) "101"
  }
  [3]=>
  array(2) {
    [0]=>
    string(4) "3792"
    [1]=>
    string(3) "102"
  }
  [4]=>
  array(2) {
    [0]=>
    string(4) "3792"
    [1]=>
    string(3) "103"
  }
  [5]=>
  array(2) {
    [0]=>
    string(4) "3792"
    [1]=>
    string(3) "104"
  }
  [6]=>
  array(2) {
    [0]=>
    string(4) "3832"
    [1]=>
    NULL
  }
}

我想将其浓缩下来

array(1552) {
  [3792]=>
  array(2) {
    [0]=>
    string(4) "99"
    [1]=>
    string(2) "100"
    [2]=>
    string(2) "101"
    [3]=>
    string(2) "102"
    [3]=>
    string(2) "103"
    [3]=>
    string(2) "104"
  }
  [3832]=>
  array(2) {
    [0]=>
    NULL
  }

2 个答案:

答案 0 :(得分:1)

这是一种快速的肮脏方式

<?php
$result = array();

// assuming your data is named $data...
foreach ($data as $pair) {
  if (!array_key_exists($pair[0], $result)) {
    $result[$pair[0]] = array();
  }
  $result[$pair[0]][] = $pair[1];
}

另一种方法是使用array_reduce

$data2 = array_reduce($data, function($res, $pair) {
  if (!array_key_exists($pair[0], $res)) {
    $res[$pair[0]] = array();
  }
  $res[$pair[0]][] = $pair[1];
  return $res;
}, array());

答案 1 :(得分:0)

假设原始数据位于$array,请尝试此

$out=array();
foreach ($array as $a)
  if (!isset($out[$a[0]])) $out[$a[0]]=array($a[1]);
  else $out[$a[0]][]=$a[1];

这应该在$out中给出您想要的结构。