2015-07-29 3 views
2

У меня есть массив следующим образомкак контурная карта массив в PHP

array(2) { ["name"]=> string(36) "newyork" ["categoryid"]=> string(1) "4" }                                                    
array(2) { ["name"]=> string(24) "michigun" ["categoryid"]=> string(1) "4" } 
array(2) { ["name"]=> string(27) "canada" ["categoryid"]=> string(1) "5" }    
array(2) { ["name"]=> string(35) "manhatten" ["categoryid"]=> string(1) "5" 
} 

я хочу иметь новый массив, в котором я буду иметь

{"4" => newyork,michigun} 
{"5" => canada,manhatten} 

.. как это можно сделать? PLS помощи.

+0

Я попробовал foreach ($ key => $ value), но я не уверен в логике. –

+0

вы хотите добавить в этот массив или что-то еще? пожалуйста, приложите желаемый результат. Спасибо. –

+0

Я хочу новый массив, который напечатает {"4" => newyork, michigun} {"5" => canada, manhatten} –

ответ

4

Вы можете использовать цикл и построить массив -

$new = array(); 
foreach($your_array as $array) { 
    if(array_key_exists($array['categoryid'], $new)) { // if categoryid is already set the concatenate the name 
     $new[$array['categoryid']] = $new[$array['categoryid']] . ',' . $array['name']; 
    } else { // set the name 
     $new[$array['categoryid']] = $array['name']; 
    } 
} 
+0

может объяснить $ new [$ array ['categoryid']] = $ new [ $ array ['categoryid']]. ','. $ Массив [ 'имя']; заявление ? –

+0

Он объединяет имя со значением, имеющим индекс категории. –

+0

в порядке. спасибо ... –

1

ИСПОЛЬЗУЕТ PHP синтаксис 5,4 массива: [] вместо array()

данных

$arr = [ 
    [ 
    "name" => "newyork", 
    "categoryid" => "4" 
    ], 
    [ 
    "name" => "michigun", 
    "categoryid" => "4" 
    ], 
    [ 
    "name" => "canada", 
    "categoryid" => "5" 
    ], 
    [ 
    "name" => "manhatten", 
    "categoryid" => "5" 
    ], 
]; 

Синтаксическая

$result = []; 

foreach ($arr as $el) { 
    if (array_key_exists($el['categoryid'], $result)) { 
    $result[$el['categoryid']] = $result[$el['categoryid']] . ',' . $el['name']; 
    } else { 
    $result[$el['categoryid']] = $el['name']; 
    } 
} 


print_r($result); 

Результат

Array ([4] => newyork,michigun [5] => canada,manhatten) 
+2

Это просто копия и вставка [этого ответа] (http://stackoverflow.com/a/31692305/2899618) –

+0

Успокойте всех. @ b0s3 просто избил меня до удара - это все. – EasyCo

+0

спасибо тонны парней :) –

4

Если не возражаете, используя внешнюю LIB, это довольно просто с ouzo-goodies:

Arrays::groupBy($array, Functions::extractField('categoryid')); 

Вы можете пойти один шаг вперед, чтобы присоединиться имена запятыми:

$result = Arrays::groupBy($array, Functions::extractField('categoryid')); 
Arrays::map($result, function($value) { 
    return Joiner::on(',')->mapValues(Functions::extractField('name'))->join($value); 
}); 
Смежные вопросы