将数组组合成更简单的数组 (PHP)



我有一个看起来像这样的数组。我正在考虑将其压缩成一个更简单的数组(见下文),我将如何做到这一点?

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
  }

这是一种快速的肮脏方法

<?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());

假设您的原始数据在$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中给出您想要的结构。

相关内容

  • 没有找到相关文章

最新更新