【问题标题】:PHP Array unique valuesPHP数组唯一值
【发布时间】:2013-05-03 11:22:52
【问题描述】:

我有一个这样的数组

Array
(
    [0] => Array
        (
            [id] => BA
            [name] => British Airways
        )

    [1] => Array
        (
            [id] => BA
            [name] => British Airways
        )

    [2] => Array
        (
            [id] => LA
            [name] => Lanchile
        )

    [3] => Array
        (
            [id] => LA
            [name] => Lanchile
        )

    [4] => Array
        (
            [id] => BA
            [name] => British Airways
        )

    [5] => Array
        (
            [id] => BA
            [name] => British Airways
        )

)

我想得到

Array
(
    [0] => Array
        (
            [id] => BA
            [name] => British Airways
        )

    [1] => Array
        (
            [id] => LA
            [name] => Lanchile
        )
)

但使用array_unique函数后,我所拥有的只是

Array
(
    [0] => Array
        (
            [id] => BA
            [name] => British Airways
        )

)

我做错了什么?

【问题讨论】:

  • 您尝试过使用array_unique(my_array, SORT_REGULAR) 吗?
  • 可能重复 - stackoverflow.com/q/307674/608170。此外,如果此数组是查询的结果,则需要重新检查查询以消除重复项。
  • 不知道如何将评论标记为答案,但是'diegoperini'你说得对,array_unique(my_array, SORT_REGULAR) + sort() 解决了这个问题! :)
  • 希望我能早 1 小时看到这些 cmets。我认为您不能将 cmets 标记为答案。您应该自己回答问题,给予@diegoperini 信用并将答案标记为已完成。

标签: php arrays array-unique


【解决方案1】:
array_unique(my_array, SORT_REGULAR)

根据 cmets 的要求。 :)

【讨论】:

  • 你宁愿说 - 伟大的“偷窃”大声笑在深切关注正义的情况下支持 diegoperini。
  • 那天我误读了 Niklas Ekman 的建议,现在我意识到这是在偷窃。造成的不便,深表歉意。我赞成这个问题。
【解决方案2】:

如前所述,array_unique 不支持多维数组,但您可以遍历数据并构建自己的数组

<?php
$airlines = array(
    array('id' => 'BA', 'name' => 'British Airways'),
    array('id' => 'LA', 'name' => 'Lanchile'),
    array('id' => 'BA', 'name' => 'British Airways'),
    array('id' => 'LA', 'name' => 'Lanchile'),
    array('id' => 'BA', 'name' => 'British Airways'),
    array('id' => 'LA', 'name' => 'Lanchile'),
);
$tmp = array();
foreach ($airlines as $item) {
    if (!in_array($item['id'], $tmp)) {
        $unique[] = $item;
        $tmp[] = $item['id'];
    }
}

var_dump($unique); // $unqiue will have your desired results in it var_dump was just for testing

【讨论】:

    【解决方案3】:
     array_unique is not intended to work on multi dimensional arrays.
    

    你需要循环数组

    array_unique

    【讨论】:

      【解决方案4】:
      $airlines = array(
          array('id' => 'BA', 'name' => 'British Airways'),
          array('id' => 'LA', 'name' => 'Lanchile'),
          array('id' => 'BA', 'name' => 'British Airways'),
          array('id' => 'LA', 'name' => 'Lanchile'),
          array('id' => 'BA', 'name' => 'British Airways'),
          array('id' => 'LA', 'name' => 'Lanchile'),
      );
      
      
      $unique = array_map(
          'unserialize',
          array_unique(
              array_map(
                  'serialize',
                  $airlines
              )
          )
      );
      
      var_dump($unique);
      

      【讨论】:

      • 如果元素的顺序不同,那将失败。 array_unique($airlines, SORT_REGULAR); 是正确答案。
      猜你喜欢
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多