0

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

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

4

5 回答 5

1

循环遍历已经发生的$user数组和unset()用户。address_id

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

$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);
于 2014-03-14T07:41:49.323 回答
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;
});
于 2020-03-03T14:25:50.843 回答
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);
于 2014-03-14T07:40:56.267 回答
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 数组。

于 2014-03-14T10:00:45.547 回答
-2

没有本机 PHP 函数明确执行您想要的操作,但您可以: - 您是否拥有函数,这需要 2 分钟 - 使用array_filter()

于 2014-03-14T07:37:12.620 回答