2014-11-28 3 views
2

Я нахожусь в ситуации, когда я хочу, чтобы сгруппировать массивы в PHP для группы на базе там идентификатор группы, что я получаю следующеемассива группы в другой массив на основе ключа/значение

Array ( 

[0] => Array ( 
[raw] => I am text string 
[group_id] => 1 
) 

[1] => Array ( 
[raw] => Another text string 
[group_id] => 1 
) 

[2] => Array ( 
[raw] => text placeholder 
[group_id] => 2 
) 

) 

, но я хочу, выход, как показано ниже

Array ( 

[0] => Array ( 

Array(
[0] => Array (
[raw] => I am text string 
[group_id] => 1 
) 
[1] => Array ( 
[raw] => Another text string 
[group_id] => 1 
) 

) 

[1] => Array ( 
[raw] => text placeholder 
[group_id] => 2 
) 

) 

В выходной ток, Вы можете заметить, что «group_id» из первых двух элементов массива одинаковы т.е. 1, и в ожидаемом выходе элементов с тот же 'group_id' завернут в родительский массив.

для вашего рассмотрения, вот код массива;

<?php  
$output = array(
array ("raw"=> "I am text string", "group_id" => 1), 
array ("raw"=> "Another text string", "group_id" => 1), 
array ("raw"=> "text placeholder", "group_id" => 2), 
); 
print_r($output); 
?> 

Так что, в конечном итоге, я хочу сгруппировать массивы с одинаковым «group_id» в другой массив.

Заранее благодарим за ваше время и помощь.

любая помощь приветствуется, поскольку я не получаю логику.

ответ

2

Я не думаю, что есть ярлык для обрезки вложенных размеров для одного/одиночек группы идентификаторов, но вы могли бы сделать что-то вроде этого:

$output = array(
    array ("raw"=> "I am text string", "group_id" => 1), 
    array ("raw"=> "Another text string", "group_id" => 1), 
    array ("raw"=> "text placeholder", "group_id" => 2), 
); 

$new = array(); 
foreach ($output as $value) { 
    $new[$value['group_id']][] = $value; 
} 
// trim single/lone arrays 
foreach ($new as &$value) { 
    if(count($value) <= 1) { 
     $value = reset($value); 
    } 
} 

echo '<pre>'; 
print_r($new); 
+0

Спасибо! Оно работало завораживающе!!! – Alyas

+0

@ Аляс уверен, что мне это понравилось – Ghost

+1

@Ghost Это сработало для меня. Благодаря!!!. Также я немного изменил его. Coz ваш код не работает для 1 элемента массива. Поэтому я изменил «if (count ($ value) <= 1) {« to »if (count ($ value) <= 0) {". – Mahesh

0

Используйте следующий код:

<?php  
$output = array(
array ("raw"=> "I am text string", "group_id" => 1), 
array ("raw"=> "Another text string", "group_id" => 1), 
array ("raw"=> "text placeholder", "group_id" => 2), 
); 

$new = array(); 
foreach($output as $values) { 
    $new[$values['group_id']][] = $values; 
} 
$new = array_values($new); 
echo '<pre>'; 
print_r($new); 
?> 
+0

Лучшая логика, но результат не так, как ожидалось, так как он также переносит одиночный «group_id» в массив, я хочу этот «массив» («raw» => «text placeholder», «group_id» => 2) «не быть обернутым в массив, но только если есть похожие group_ids – Alyas

2
$newArr = array(); 
foreach($output as $values) { 
    $new[$values['group_id']][] = $values; 
} 

Он создаст массив для вас.

+1

О, вы выбрали ответ раньше. – Tristup

Смежные вопросы