我可以使用foreach
通过公共键对数组进行分组,现在我想进一步创建一个逗号分隔的列表,每次尝试都会得到一个列表,但没有逗号;他们要么被移走,要么我做得不对。
$families = array();
foreach($results as $key => $item) {
$families[$item['family_id']][] = $item;
}
Array (
[54] => Array (
[0] => Array (
[family_id] => 54
[firstname] => Adam
[primary] => 1
)
)
[89] => Array (
[0] => Array (
[family_id] => 89
[firstname] => Alex
[primary] => 1
)
)
[44] => Array (
[0] => Array (
[family_id] => 44
[firstname] => Anne-Marie
[primary] => 1
)
)
[282] => Array (
[0] => Array (
[family_id] => 282
[firstname] => Ashley
[primary] => 1
)
[1] => Array (
[family_id] => 282
[firstname] => Leah
[primary] =>
)
[2] => Array (
[family_id] => 282
[firstname] => Brad
[primary] =>
)
)
[292] => Array (
[0] => Array (
[family_id] => 292
[firstname] => Brenda
[primary] => 1
)
)
)
最终结果是一个foreach
,它会生成以下有子女的家庭列表。
家人:亚当
家人:亚历克斯
家庭:安妮·玛丽
家人:Ashley
孩子们:Leah,Brad
家庭:Brenda
foreach($families as $family) {
foreach($family as $key => $value) {
if (empty($value['primary'])) {
$children = array('firstname' => $value['firstname']);
$child = implode(', ', $children);
}
if (!empty($value['primary'])) {
echo 'Family: '.$value['firstname'];
}
}
}
您可以尝试先将父母,然后将孩子放入单独的数组中
foreach ($families as $family) {
$parents = array_map(function ($person) {
return $person['firstname'];
}, array_filter($family, function ($person) {
return !empty($person['primary']);
}));
$children = array_map(function ($person) {
return $person['firstname'];
}, array_filter($family, function ($person) {
return empty($person['primary']);
}));
if (count($parents)) {
echo 'Family : ' . implode(',', $parents) . '<br />';
}
if (count($children)) {
echo 'Children : ' . implode(',', $children) . '<br />';
}
}
array_filter帮助我们排除不需要的数据,而array_map允许我们对每个数组元素执行一个函数:例如,返回名字。