2015-12-23 2 views
0

Мне удалось сгруппировать массив по общему ключу, используя foreach. Теперь я ищу, чтобы взять дальше и создать список с разделителями-запятыми, и каждая попытка приводит к списку, но без запятых; они либо удаляются, либо я не делаю этого правильно.PHP - Создание списка, разделенного запятой, в 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 генерирует следующий список семей с детьми.

семья: Адам

Семейство: Alex

Семейство: Анн-Мари

Семья: Эшли
Дети: Леа, Брэд

Семейства: Бренд

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']; 
    } 
    } 
} 
+2

Можете ли вы предоставить код, который пытается вывести ожидаемый результат? – jiboulex

+0

Где код, который пытается вывести список, разделенный запятой? –

+0

Извините, пришлось вернуть его, когда я пытался попробовать какое-то другое решение, но все равно не получаю его, и в моем коде может быть только два массива или foreach, что вызывает мою проблему. –

ответ

0

Вы могли бы попробовать сначала получить родителей, потом детей, в отдельные массивы

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 />'; 
    } 
} 

Массив_filter поможет нам исключить ненужные данные, в то время как array_map позволяет нам выполнять функцию для каждого элемента массива: например, возвращая первое имя.

+0

Отлично, это то, что я искал, чтобы получить, и это сработало как шарм, есть другие данные и форматирование, которые я хочу рисовать, и должен быть в состоянии пройти через ваш пример, чтобы получить его. Большое спасибо! –

+0

Добавлены дополнительные данные и форматирование, и это работает как шарм! Еще раз спасибо! –