разбиение большого массива на меньшие массивы на основе имен ключей

У меня есть массив, ниже которого мне нужно разбить на меньшие массивы на основе ключа [location] (так что мне нужен массив .co.uk и массив .com). Клавиша [location] не ограничена .co.uk или .com.

Любая помощь приветствуется.

[22] => Array ( [query] => tttt [location] => .co.uk [x] => 1292889600 [y] => 1 [fullurl] => http://www.tttt.com/ ) [20] => Array ( [query] => tttt [location] => .co.uk [x] => 1292976000 [y] => 1 [fullurl] => http://www.tttt.com/ ) [21] => Array ( [query] => tttt [location] => .com [x] => 1292976000 [y] => 1 [fullurl] => http://www.tttt.com/ ) [19] => Array ( [query] => tttt [location] => .co.uk [x] => 1293062400 [y] => 1 [fullurl] => http://www.tttt.com/ ) [18] => Array ( [query] => tttt [location] => .com [x] => 1293062400 [y] => 1 [fullurl] => http://www.tttt.com/ ) [17] => Array ( [query] => tttt [location] => .co.uk [x] => 1293148800 [y] => 1 [fullurl] => http://www.tttt.com/ ) [16] => Array ( [query] => tttt [location] => .com [x] => 1293148800 [y] => 1 [fullurl] => http://www.tttt.com/ ) [14] => Array ( [query] => tttt [location] => .com [x] => 1293235200 [y] => 1 [fullurl] => http://www.tttt.com/ ) 

Вы можете сделать это:

 $byLocation = array(); foreach ($arr as $key => $item) { if (!isset($byLocation[$item['location']])) { $byLocation[$item['location']] = array(); } $byLocation[$item['location']][$key] = $item; } 

Тогда, например, $byLocation['.co.uk'][22] – это первый элемент вашего исходного массива. Если вы не хотите поддерживать оригинальный ключ, просто опустите его и используйте вместо него [] .

Я бы подумал, что вам просто нужно перебирать массив следующим образом:

  1. Проверьте, известно ли текущее «местоположение» (array_key_exists) в массиве $ domains. Если он не добавляет его. ( $domains[<current key>] = array(); )

  2. Добавьте текущие данные в новый массив под соответствующим ключом местоположения в массиве $ domains. ( array_push($domains[<current key>], array('query'=>XXX, 'x'=>...)); )