Сравнение элементов в многомерном массиве

Скажем, у меня многомерный массив. Например:

Array ( [0] => Array ( [animal_id] => 5494 [animal_name] => "Suzy" [animal_type] => "zebra" [animal_location] => 0 [animal_awake] => 1 [animal_age] => 3 ) [1] => Array ( [animal_id] => 5494 [animal_name] => "Joshua" [animal_type] => "panda" [animal_location] => 5 [animal_awake] => 0 [animal_age] => 8 ) [2] => Array ( [animal_id] => 5494 [animal_name] => "Debra" [animal_type] => "snake" [animal_location] => 7 [animal_awake] => 1 [animal_age] => 3 ) [3] => Array ( [animal_id] => 5495 [animal_name] => "Caleb" [animal_type] => "zebra" [animal_location] => 0 [animal_awake] => 1 [animal_age] => 3 ) [4] => Array ( [animal_id] => 5495 [animal_name] => "Joshua" [animal_type] => "panda" [animal_location] => 5 [animal_awake] => 0 [animal_age] => 8 ) [5] => Array ( [animal_id] => 5495 [animal_name] => "Debra" [animal_type] => "snake" [animal_location] => 7 [animal_awake] => 1 [animal_age] => 3 ) [6] => Array ( [animal_id] => 5496 [animal_name] => "Emily" [animal_type] => "zebra" [animal_location] => 0 [animal_awake] => 1 [animal_age] => 3 ) [7] => Array ( [animal_id] => 5496 [animal_name] => "Joshua" [animal_type] => "panda" [animal_location] => 5 [animal_awake] => 0 [animal_age] => 8 ) [8] => Array ( [animal_id] => 5496 [animal_name] => "Debra" [animal_type] => "snake" [animal_location] => 7 [animal_awake] => 1 [animal_age] => 3 ) ) 

И я хочу сравнить всех змей с змеями, и все панды против панды и т. Д. (Но не змея против панды) и поместить уникальные элементы в массив (все уникальные элементы в один массив), как бы я пойдите об этом. Поскольку они являются элементами внутри массива, я немного тупик. Кроме того, я не буду знать заранее, сколько будет разных типов. Например, однажды мне удалось передать многомерный массив с Panda, Bear, Snake. В следующий раз мне может быть передан массив с Bird, Cat, Panda, Zebra.

Есть идеи?

ЗАКЛЮЧИТЕЛЬНЫЙ ВЫХОД

  Array ( [0] => Array ( [animal_id] => 5494 [animal_name] => "Suzy" [animal_type] => "zebra" [animal_location] => 0 [animal_awake] => 1 [animal_age] => 3 ) [1] => Array ( [animal_id] => 5494 [animal_name] => "Joshua" [animal_type] => "panda" [animal_location] => 5 [animal_awake] => 0 [animal_age] => 8 ) [2] => Array ( [animal_id] => 5495 [animal_name] => "Caleb" [animal_type] => "zebra" [animal_location] => 0 [animal_awake] => 1 [animal_age] => 3 ) [3] => Array ( [animal_id] => 5495 [animal_name] => "Debra" [animal_type] => "snake" [animal_location] => 7 [animal_awake] => 1 [animal_age] => 3 ) [4] => Array ( [animal_id] => 5496 [animal_name] => "Emily" [animal_type] => "zebra" [animal_location] => 0 [animal_awake] => 1 [animal_age] => 3 ) ) 

Клавиши массива должны быть уникальными, поэтому давайте использовать это в наших интересах.

 function get_animal_key($animal) { return $animal['animal_type'] . '-' . $animal['animal_name']; } $uniques = array(); foreach ($array as $animal) { $key = get_animal_key($animal); $uniques[$key] = $animal; } var_export($uniques); 

Дает следующий массив

 array ( 'zebra-Suzy' => array ( 'animal_id' => 5494, 'animal_name' => 'Suzy', 'animal_type' => 'zebra', 'animal_location' => 0, 'animal_awake' => 1, 'animal_age' => 3, ), 'panda-Joshua' => array ( 'animal_id' => 5496, 'animal_name' => 'Joshua', 'animal_type' => 'panda', 'animal_location' => 5, 'animal_awake' => 0, 'animal_age' => 8, ), 'snake-Debra' => array ( 'animal_id' => 5496, 'animal_name' => 'Debra', 'animal_type' => 'snake', 'animal_location' => 7, 'animal_awake' => 1, 'animal_age' => 3, ), 'zebra-Caleb' => array ( 'animal_id' => 5495, 'animal_name' => 'Caleb', 'animal_type' => 'zebra', 'animal_location' => 0, 'animal_awake' => 1, 'animal_age' => 3, ), 'zebra-Emily' => array ( 'animal_id' => 5496, 'animal_name' => 'Emily', 'animal_type' => 'zebra', 'animal_location' => 0, 'animal_awake' => 1, 'animal_age' => 3, ), ) 

Как вы можете видеть, это принимает тип и имя животного как уникальные идентификаторы. В вашем вопросе не указано, что делает животное уникальным, поэтому измените его в соответствии с вашими потребностями.

Как насчет сортировки по типу:

 $animalsByType = array(); foreach ($array as $animal) { $type = $animal['animal_type']; if (!isset($animalsByType[$type])) { $animalsByType[$type] = array(); } $animalsByType[$type][] = $animal; } 

Я не уверен, какое сравнение вы хотите сделать, но это по крайней мере дает вам индивидуальные подсписки по типу.

Вы можете запустить массив, а затем перекрестно проверить каждый элемент:

 foreach($aAnimals AS $iKey => $aAnimalData { foreach($aAnimals AS $iSubKey => $aData) { if($aAnimalData['animal_type'] == $aData['animal_type'] && $iKey != $iSubKey) { // Start doing whatever you want to do when the types match. // The last part makes sure the second foreach does not // match with the first one. } } } 

Если вы укажете, какое сравнение вы хотите, я мог бы улучшить этот ответ.