【问题标题】:PHP Array_uniquePHP Array_unique
【发布时间】:2021-02-25 06:12:00
【问题描述】:

如果子数组位置0的数组项与后续项匹配,是否可以删除子数组?

例如;

Array ( [0] => Array ( [0] => 1234 [1] => XX000 ) 
        [1] => Array ( [0] => 1234 [1] => XX001 ) 
        [2] => Array ( [0] => 1234 [1] => XX002 ) 
      )

将调整为输出;

Array ( [0] => Array ( [0] => 1234 [1] => XX000 ) )

【问题讨论】:

  • 很遗憾没有,不过谢谢!

标签: php sub-array array-unique


【解决方案1】:

function my_array_filter($arr){
    $exist = [];

    return array_filter($arr, function($element){
         if( ! array_key_exist($element[0], $exist)){
            $exist[$element[0]] = true;
            return true;
         }
         return false;
     });
}

【讨论】:

    【解决方案2】:

    也许可以通过数组函数和回调的一些神秘用法来实现,但我更喜欢尽可能保持简单,所以几年后我会理解自己的解决方案。

    那为什么不编程呢?

    $ORG = [ [ 1234, 'XX000' ],  
             [ 1234, 'XX001' ],  
             [ 1234, 'XX002' ], 
             [19987, 'XX000'] ];
    
    $NEW = [];
    $USEDKEYS = [];
    
    foreach ($ORG as $one){
        if (in_array($one[0], $USEDKEYS)) {
            // skip.   
        } else {
            $NEW[] = $one;
            $USEDKEYS[] = $one[0];
        }
    }
    unset ($USEDKEYS, $ORG);
    var_dump ($NEW);
    

    【讨论】:

      【解决方案3】:

      总是这样,发布后我找到了解决方案($query是多维数组);

      $newArr = array();
      
      foreach ($query as $val) {
          $newArr[$val[0]] = $val;    
      }
      
      $query = array_values($newArr);
      

      【讨论】:

      • 您可以接受自己的答案,这将有助于以后阅读本文的其他人
      • 与此方法非常相似的是$query = array_values(array_column($query, null, 0));
      • 这行得通,但您必须知道您的键现在来自内部数组值 [0]。所以它们可能是 2、54、4、99 等(而不是 0、1、2、3 等)在您的情况下这可能不是问题,但需要考虑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      相关资源
      最近更新 更多