我处于通过子阵列索引使数组唯一的情况。请参考此代码并帮助我解决此问题。
$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个用户。请帮我解决这个问题。
答案 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()