PHP-在foreach中创建一个逗号分隔的列表


PHP - Creating a comma separated list within foreach

我可以使用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允许我们对每个数组元素执行一个函数:例如,返回名字。