我有以下数组,$cat_group_array
:
我的目标是得到一个类似这样的输出,我在分类标题
下显示组和组名<>之前猫:010010 -牛排-条纹0015 -牛排-肋眼牛排0020 -牛排-丁字骨0030 -牛排-上腰肉0035 -牛排-其他品种猫:050145 -鸡地0150 -鸡肉面包屑0155 -鸡胸之前我已经尝试了几种方法,但都没有结果。我一直在尝试这样做,但我没有得到输出。
foreach ($cat_group_array as $key => $row) {
$test = $cat_group_array[$key]['cat'];
echo "Category: " . $test;
while ($cat_group_array[$key]['cat'] == $test) {
echo "Pgroup #: " . $cat_group_array[$key]['pgroup'] .
" Group Name = " . $cat_group_array[$key]['pgroup_name'] . "<br /><br />";
}
}
如果有人能告诉我正确的方向,我将不胜感激。
您可以通过几种方式做到这一点。我将提供一个解决方案,您不需要按类别对原始数组进行排序。它首先创建另一个以类别名称为键的数组,保存包含属于它的行的子数组。然后遍历这些类别,每个类别遍历行:
foreach ($cat_group_array as $row) {
$categories[$row["cat"]][] = $row;
}
foreach ($categories as $name => $groups ) {
echo "n<h3>Category: $name</h3>nn";
foreach ($groups as $group ) {
echo "<p>{$group['pgroup']} {$group['pgroup_name']}</p>n";
}
}
在eval.in上运行
由于您需要提前知道类别,因此您可以使用array_map
从数组中提取它们。
$categories = array_map(function($cat) {
return $cat['cat'];
}, $cat_group_array);
因为你只需要知道唯一的类别,你可以使用array_unique
来清除任何重复的类别。
$categories = array_unique($categories);
现在您可以使用$categories
数组作为过滤器,以使用array_filter
获得所需的最终结果。
foreach($categories as $category) {
$items = array_filter(function($item) use($category) {
return $item['cat'] === $category;
}, $cat_group_array);
echo "Cat: $categorynn";
foreach($items as $item) {
echo "$pgroup - $pgroup_namen";
}
echo "nn";
}
最后的结果应该和预期的一样。
<>之前猫:010010 -牛排-条纹0015 -牛排-肋眼牛排0020 -牛排-丁字骨0030 -牛排-上腰肉0035 -牛排-其他品种猫:050145 -鸡地0150 -鸡肉面包屑0155 -鸡胸