我有一个看起来像这样的数组。我正在考虑将其压缩成一个更简单的数组(见下文),我将如何做到这一点?
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
中给出您想要的结构。