将数组合并为一个更简单的数组(PHP)[关闭]

问题描述:

I have an array that looks like this. I'm looking at condensing this down into a simpler array (see below) how would I go about this?

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
  }
}

I would like to condense it down

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
  }

我有一个如下所示的数组。 我正在考虑将其缩小为一个更简单的数组(见下文)我将如何解决这个问题? p>

  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”\  n} 
 [5] => 
 array(2){
 [0] => 
 string(4)“3792”
 [1] => 
 string(3)“104  “
} 
 [6] => 
 array(2){
 [0] => 
 string(4)”3832“
 [1] => 
 NULL 
}  
} 
  code>  pre> 
 
 

我想将其浓缩下来 p>

  array(1552){
 [3792]  ] => 
 array(2){
 [0] => 
 string(4)“99”
 [1] => 
  string(2)“100”
 [2] => 
 string(2)“101”
 [3] => 
 string(2)“102”
 [3] => \  n string(2)“103”
 [3] => 
 string(2)“104”
} 
 [3832] => 
 array(2){
 [0] =>  ; 
 NULL 
} 
  code>  pre> 
  div>

This is a quick 'n dirty way to do it

<?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];
}

Another way would be to use 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());

Assuming you original data is in $array, try this

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

This should giveyour desired structure in $out.