Php 多维有序阵列
我有一个如下所示的数组:Php 多维有序阵列,php,arrays,Php,Arrays,我有一个如下所示的数组: $cars = array ( array( 'a' => 'audi', 'b' => 'a4'), array( 'a' => 'peugeot', 'b' => '306'), array( 'a' => 'audi', 'b' => 'a4'), array( 'a' => 'audi', 'b' => 'a5'), array(
$cars = array (
array(
'a' => 'audi',
'b' => 'a4'),
array(
'a' => 'peugeot',
'b' => '306'),
array(
'a' => 'audi',
'b' => 'a4'),
array(
'a' => 'audi',
'b' => 'a5'),
array(
'a' => 'peugeot',
'b' => '106'),
array(
'a' => 'peugeot',
'b' => '106'),
);
我需要将这样的数组订购到(id与名称相同):
因此,汽车品牌需要根据所统计的车型进行分组
我已经有了这个密码;但这仅适用于组部分,计数部分缺失
function mergeAndOrder($data){
// set group arrays
$i = 0; $group1 = array();
// loop trough array
$array = array(); $array2 = array();
if($data != null){
foreach($data AS $row){
// search and order level1
$search = array_search($row->a,$group1);
// this object is not found
if(is_int($search) == false){
$group1[$i] = $row->a;
$array[$i]['id'] = $row->a;
$array[$i]['name'] = $row->a;
$array[$i]['data'] = array();
$i++;
}
}
}
return $array;
}
有人知道这个案子的解决办法吗?谢谢
---输入(部分)---
a=本例中的租赁公司
Array
(
[0] => stdClass Object
(
[b] => AUDI
[a] => LPN
)
[1] => stdClass Object
(
[b] => AUDI
[a] => LPN
)
[2] => stdClass Object
(
[b] => AUDI
[a] => LPN
)
[3] => stdClass Object
(
[b] => AUDI
[a] => LPN
)
---输出(部分)---
如果我没弄错你的问题,这应该是你想要的
function mergeAndOrder ($data) {
$output = array();
foreach ($data as $item) {
$id = $item->a;
$value = $item->b;
if (!array_key_exists($id, $output)) {
$output[$id] = array('id' => $id, 'name' => $id, 'data' => array());
}
if (!array_key_exists($value, $output[$id]['data'])) {
$output[$id]['data'][$value] = 0;
}
$output[$id]['data'][$value]++;
}
// Order by name element
uasort($output, function ($a, $b) {
return strcasecmp($a['name'], $b['name']);
});
return $output;
}
输出:
Array
(
[audi] => Array
(
[id] => audi
[name] => audi
[data] => Array
(
[a4] => 2
[a5] => 1
)
)
[peugeot] => Array
(
[id] => peugeot
[name] => peugeot
[data] => Array
(
[306] => 1
[106] => 2
)
)
)
什么是
echo“”。打印($data,1)。“”代码>输出?用php代码plz发布输入和输出数组。@JelleP看起来完全不同。现在你的输入是一个类,它有不同的属性,基本上只有4个相同的对象。@AndreschSerj关于输入数组你是对的。它确实是一个对象,但情况保持不变。我的问题清楚了吗?还是有什么东西还没有解释?好吧,你的意见改变了。真奇怪。Anywho:您执行数组搜索以查找已经存在的条目。您只需要使用结果来更改状态。考虑阅读AARYAL搜索文档
function mergeAndOrder ($data) {
$output = array();
foreach ($data as $item) {
$id = $item->a;
$value = $item->b;
if (!array_key_exists($id, $output)) {
$output[$id] = array('id' => $id, 'name' => $id, 'data' => array());
}
if (!array_key_exists($value, $output[$id]['data'])) {
$output[$id]['data'][$value] = 0;
}
$output[$id]['data'][$value]++;
}
// Order by name element
uasort($output, function ($a, $b) {
return strcasecmp($a['name'], $b['name']);
});
return $output;
}
Array
(
[audi] => Array
(
[id] => audi
[name] => audi
[data] => Array
(
[a4] => 2
[a5] => 1
)
)
[peugeot] => Array
(
[id] => peugeot
[name] => peugeot
[data] => Array
(
[306] => 1
[106] => 2
)
)
)