私はこのような配列を持っています:
$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はnameと同じです):
name => audi
id=> audi
data => a4 => 2
a5 => 1
name => peugeot
id=> peugeot
data => 306 => 1
106 => 2
だから、車の種類を数えれば、車のブランドをグループ化する必要があります。
私はすでにこのコードを持っています。それはグループ部分のみであり、カウント部分は欠落しています。
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;
}
誰かがこのケースの解決策を知っていますか?ありがとう!
--- INPUT(の一部)--- この場合、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
)
---出力(一部)---
Array
(
[0] => Array
(
[id] => LPN
[name] => LPN
[data] => Array
(
)
)
[1] => Array
(
[id] => ARV
[name] => ARV
[data] => Array
(
)
)
[2] => Array
(
[id] => ARVB
[name] => ARVB
[data] => Array
(
)
)
[3] => Array
(
[id] => LPD
[name] => LPD
[data] => Array
(
)
)
)
Array
(
[0] => Array
(
[id] => LPN
[name] => LPN
[data] => Array
(
)
)
[1] => Array
(
[id] => ARV
[name] => ARV
[data] => Array
(
)
)
[2] => Array
(
[id] => ARVB
[name] => ARVB
[data] => Array
(
)
)
回答:
回答№1は1私があなたの質問を正しく理解すれば、これはあなたが望むことをするはずです。
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
)
)
)