【问题标题】:Php array unique subarray based on a value基于值的php数组唯一子数组
【发布时间】:2014-03-14 07:31:44
【问题描述】:

我的情况是通过子数组索引使数组唯一。请参考此代码并帮助我解决这个问题。

    $user=Array(
       [1]=>Array(
                 username => Sujith,
                 email=>someone@example.com,
                 [address] => Array(
                    [address_id] => 1227
                    [city] => Ayoor
                    [state] => Kerala
                    [Country] => India
                 )
      )
     [2]=>Array(
         username => Ajith,
         email=>someone2@example.com,
         [address] => Array(
            [address_id] => 1227
            [city] => Ayoor
            [state] => Kerala
            [Country] => India
        )
     )
     [3]=>Array(
         username => Akhil,
         email=>someone3@example.com,
         [address] => Array(
            [address_id] => 1228
            [city] => Kollam
            [state] => Kerala
            [Country] => India
        )

    )
 )

我想通过address.address_id使它唯一。所以结果数组应该是

    $user=Array(
           [1]=>Array(
                     username => Sujith,
                     email=>someone@example.com,
                     [address] => Array(
                        [address_id] => 1227
                        [city] => Ayoor
                        [state] => Kerala
                        [Country] => India
                     )
          )
         [3]=>Array(
             username => Akhil,
             email=>someone3@example.com,
             [address] => Array(
                [address_id] => 1228
                [city] => Kollam
                [state] => Kerala
                [Country] => India
            )

        )
     )

我的意思是,每个地址有 1 个用户..请帮我解决这个问题..

【问题讨论】:

    标签: php arrays array-unique


    【解决方案1】:

    循环遍历$user 数组和unset() 用户,address_id 已经出现。

    您可以使用辅助数组来跟踪已发生的address_ids。

    $addresses = array();
    foreach ($user as $key => $value) {
        $id = $value['address']['address_id'];
        if (in_array($id, $addresses)) {
            unset($user[$key]);
        } else {
            $addresses[] = $id;
        }
    }
    unset($addresses);
    

    【讨论】:

    • 是的,它应该是这样工作的,因为没有内置函数来执行操作。一起使用 array_map 和 array_unique 我们可以获得唯一的 address_id 但这将需要额外的循环来根据需要生成数组。同样使用 array_filter 您需要额外的循环来生成数组。所以是的,简单来说你的答案很好!
    【解决方案2】:

    一个简短的解决方案:

    $ids = [];
    $result = array_filter($user, function ($item) use (&$ids) {
        $id = $item['address']['address_id']; //or whatever you want to be unique
        if (in_array($id, $ids)) return false;
    
        $ids[] = $id;
        return true;
    });
    

    【讨论】:

      【解决方案3】:
      $tmpArray = array();
      $newArr = array();
      foreach($users as $user)
      {
      
      if(!in_array($user['address']['address_id'],$tmpArray))
        $newArr[] = $user;
      $tmpArray[] = $user['address']['address_id']
      }
      var_dump($newArr);
      

      【讨论】:

        【解决方案4】:
           $unique_array = array();
           $address_id_accumulator = array();
            foreach ($user as $k => $v) {         
                if ( !in_array( $v['address']['address_id'], $address_id_accumulator) ){
                    $unique_array[$k] = $v;
                }
                $address_id_accumulator[] = $v['address']['address_id'];         
            }
        

        您的 $user 数组是此处的输入。 $unique_array 将是具有唯一地址 ID 的 $user 数组。

        【讨论】:

          【解决方案5】:

          没有原生 PHP 函数明确地做你想做的事,但你可以: - 你自己的功能,这需要2分钟 - 使用array_filter()

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-06-17
            • 1970-01-01
            • 2011-08-28
            • 1970-01-01
            • 1970-01-01
            • 2011-12-05
            • 2020-08-05
            相关资源
            最近更新 更多