【问题标题】:How to get unique value in multidimensional array如何在多维数组中获取唯一值
【发布时间】:2012-05-11 14:47:46
【问题描述】:

我在溢出和谷歌上做了很多环顾四周,但没有一个结果适用于我的具体情况。

我有一个名为 $holder 的占位符数组,值如下:

    Array ( 
    [0] => Array ( 
        [id] => 1 
        [pid] => 121 
        [uuid] => 1  
        )
    [1] => Array ( 
        [id] => 2 
        [pid] => 13
        [uuid] => 1
        )
    [2] => Array ( 
        [id] => 5 
        [pid] => 121 
        [uuid] => 1
        )
    ) 

我正在尝试从这个多维数组中提取不同/唯一的值。我想要的最终结果是一个包含 (13,121) 的变量,或者(最好)一个数组,如下所示: 大批( [0] => 13 [1] => 121 )

我再次尝试了序列化等,但不太明白在每个数组中使用单个键操作时它是如何工作的。

我尽量说清楚。我希望这是有道理的......

【问题讨论】:

标签: php multidimensional-array unique-values


【解决方案1】:

看起来很简单:将所有pid 值提取到它们自己的数组中,通过array_unique 运行它:

$uniquePids = array_unique(array_map(function ($i) { return $i['pid']; }, $holder));

同样的事情:

$pids = array();
foreach ($holder as $h) {
    $pids[] = $h['pid'];
}
$uniquePids = array_unique($pids);

【讨论】:

  • 我想知道为什么这不起作用array_unique(array_map(function ($i) { return $i[$id]; }, $holder)); 有没有办法使用变量而不是预定义的键名?
  • @deceze 啊,好吧,它在匿名函数内部。谢谢!
  • 这可行,但效率低下。为什么要添加一堆元素并立即删除它们?只需遍历数组并一一过滤!我正在添加我自己的答案。
  • @Jorge 是的,这可以通过遍历数组一次来提高效率,将其所有元素放入一个新数组作为键,然后仅提取键。然而,在可读性、可维护性和性能之间存在权衡,我认为这个解决方案达到了一个不错的平衡,这对于平均大小的数组来说是很好的。
【解决方案2】:

试试这个

foreach($arr as $key => $val) {
    $new_arr[] = $val['pid'];
}
$uniq_arr = array_unique($new_arr);

【讨论】:

    【解决方案3】:

    只需对其进行迭代并在结果上应用array_unique

    foreach($holder as $yourValues){
        $pids[] = $yourValues['pid'];
    }
    $yourUniquePids = array_unique($pids);
    

    【讨论】:

      【解决方案4】:

      您好,请尝试下面给出的代码以获取唯一值,然后对该值进行排序

      <?php
      
      $sort_arr = unique_sort($holder, 'pid');
      echo "<pre>";
      print_r($sort_arr);
      echo"</pre>";
      
      /*function for get unique value then sort them*/
      
      function unique_sort($arrs, $id) {
          $unique_arr = array();
          foreach ($arrs AS $arr) {
      
              if (!in_array($arr[$id], $unique_arr)) {
                  $unique_arr[] = $arr[$id];
              }
          }
          sort($unique_arr);
          return $unique_arr;
      }
      

      谢谢

      【讨论】:

        【解决方案5】:

        假设你的数组被称为 $holder:

        $unique = array();
        foreach( $holder as $h )
            if( ! in_array($h, $unique ) )
                $unique[] = $h;
        

        是一种比通过 array_unique 稍微有效的方法,我相信。可能是一样的。

        【讨论】:

        • in_array 本质上是一次又一次地循环数组,所以你有两个嵌套循环。这本身就是低效的。
        【解决方案6】:

        在 php >= 5.5 中你可以使用array_column:

        array_unique(array_column($holder, 'pid'));
        

        【讨论】:

        • 我认为这是最好的方法。
        【解决方案7】:

        对于我的情况,我使用这种方法

        //get some data from db to array
        while ($row = mysqli_fetch_assoc($query)){
           $data[] = $row;
        }
        
        //display unique value
        echo "<table>";
        $uniq = array();
        foreach ($data as $row) {
            if(!in_array($row['path'], $uniq)) {
                $uniq[] = $row['path'];
                echo "<tr>";
                echo "<td>";
                echo $row['path'];
                echo "</td>";
                echo "<td>";
                echo $row['relationship_id'];
                echo "</td>";
                echo "</tr>";
            }
        }
        echo "</table>";
        

        【讨论】:

        • 我不明白这是如何回答这个问题的:它在多维数组中获得了独特的价值
        【解决方案8】:
        $uniquearray = [];
            for($i=0;$i<count($assocarray);$i++){
                if(!in_array($assocarray[$i]['KEY'],$uniquearray)){
                    $uniquearray[$i]= $assocarray[$i]['KEY'];
                }
        }
        

        【讨论】:

        • 除了你的代码,你能提供一个简短的解释吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多