Php数组基于值的唯一子阵列

时间:2014-03-14 07:31:44

标签: php arrays array-unique

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

    $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个用户。请帮我解决这个问题。

5 个答案:

答案 0 :(得分:1)

遍历$user数组和unset()用户,address_id已经发生过。{/ p>

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

$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);

答案 1 :(得分:1)

一个简短的解决方案:

$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;
});

答案 2 :(得分:0)

$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);

答案 3 :(得分:0)

   $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数组。

答案 4 :(得分:-2)

没有本机PHP函数明确地执行您想要的操作,但您可以: - 你有自己的功能,这需要2分钟 - 使用array_filter()