Php 比较多维数组中的元素

Php 比较多维数组中的元素,php,multidimensional-array,Php,Multidimensional Array,假设我有一个多维数组。例如: Array ( [0] => Array ( [animal_id] => 5494 [animal_name] => "Suzy" [animal_type] => "zebra" [animal_location] => 0 [animal_awake] => 1

假设我有一个多维数组。例如:

 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 )             
         )
我想比较所有的蛇和蛇,所有的熊猫和熊猫等等(但不是蛇和熊猫),把唯一的元素放到一个数组中(所有唯一的元素都放到一个数组中),我该怎么做呢。因为它们是数组中的元素,所以我有点困惑。另外,我也不知道会有多少种不同的类型。例如,有一次我可以通过一个包含熊猫、熊、蛇的多维数组——下一次我可以通过一个包含鸟、猫、熊猫、斑马的数组

有什么想法吗

最终输出

      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 )    

     )

按类型排序如何:

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

我不确定您要进行哪种比较,但这至少可以按类型获得各个子列表。

按类型排序如何:

$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.
        }
    }
}

如果您指定要进行哪种比较,我可以用它来改进此答案。

您可以运行数组,然后交叉检查每个项目:

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.
        }
    }
}

如果您指定需要哪种比较,我可以用它来改进这个答案。

数组键必须是唯一的,所以让我们利用它来提高我们的优势

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,
  ),
)

如您所见,这将动物的类型和名称作为唯一标识符。您的问题没有说明是什么使动物独一无二,因此请根据您的需要修改上述内容。

数组键必须是独一无二的,因此让我们利用这一点来提高我们的优势

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,
  ),
)

如您所见,这将动物的类型和名称作为唯一标识符。您的问题没有说明动物的独特之处,因此请根据您的需要修改上述内容。

谢谢,您的回答会有所帮助。我想比较并将所有唯一的数组放到一个数组中。所谓唯一,我的意思是如果其中一个类型在单个数组中具有不同的值(不包括ID)。因此,在我上面发布的数组中,所有斑马类型都会进入数组,但只有一只熊猫会在数组中,因为它们都包含相同的值。我不确定我是否仍在关注你。我给出的代码为每种独特的动物类型都有一个数组。
$animalsByType
中的每个值都是一个数组,其中包含不同的类型。您可以编辑您的问题,并举例说明生成的数组是什么样子的吗?谢谢,您的回答有点帮助。我想比较并将所有唯一的数组放到一个数组中。所谓唯一,我的意思是如果其中一个类型在单个数组中具有不同的值(不包括ID)。因此,在我上面发布的数组中,所有斑马类型都会进入数组,但只有一只熊猫会在数组中,因为它们都包含相同的值。我不确定我是否仍在关注你。我给出的代码为每种独特的动物类型都有一个数组。
$animalsByType
中的每个值都是一个数组,包含不同的类型。您可以编辑您的问题,并举一个示例,说明生成的数组是什么样子的吗?为什么大拇指朝下?我想不出一个不花很多时间的方法——我正在处理大量的数据。如果你要反对,至少写一个理由……我反对是为了否定不合逻辑的反对;-)@OviTisler谢谢。。你真是太好了,谢谢你为什么不理我?我想不出一个不花很多时间的方法——我正在处理大量的数据。如果你要反对,至少写一个理由……我反对是为了否定不合逻辑的反对;-)@OviTisler谢谢。。你真好,谢谢