2013-10-05 3 views
1

Пожалуйста, дайте мне совет. У меня есть каталог компаний. Как сгруппировать имена компаний по первому письму. На примере: A - Adidas, ASUS ... B - BMW, Bentley и т.д.Преобразование двумерной матрицы в трехмерную матрицу

Массив компаний:

 
array() { 
    [0]=> array(10) { ["id"]=> "1" ["name"]=> "Adidas"} 
    [1]=> array(10) { ["id"]=> "2" ["name"]=> "ASUS"} 
    [2]=> array(10) { ["id"]=> "3" ["name"]=> "BMW"} 
    [3]=> array(10) { ["id"]=> "4" ["name"]=> "Bentley"} 
} 

Я хочу получить:

 
array() {  
  ['A']=> array {[0]=> array(10) { ["id"]=> "1" ["name"]=> "Adidas"} , [1]=> array(10) { ["id"]=> "2" ["name"]=> "ASUS"}} 
  ['B']=> array {[2]=> array(10) { ["id"]=> "3" ["name"]=> "BMW"},[3]=> array(10) { ["id"]=> "4" ["name"]=> "Bentley"}} 
} 
+0

Пожалуйста, в следующий раз используйте правильное форматирование. –

ответ

0

Просто цикл по массиву и добавьте подмассивы в новый массив с ключом первый символ $entry["name"]

$newArray = array_keys(range('A', 'Z')); // ensure a filled array 
foreach ($data as $entry) { 
    // & ~" " is a shorthand for transforming to uppercase 
    $newArray[$entry["name"][0] & ~" ")]][] = $entry; // add $entry to $newArray 
} 
Смежные вопросы