在此功能中,我正在过滤数据库输出。我不知道如何仅获取唯一值。我的阵列:
[2] => Array (
[name] => John
[id] => D
)
[4] => Array (
[name] => Grace
[id] => K
)
[6] => Array (
[name] => John
[id] => U
)
现在,我需要一个仅包含第一个“ John”和“ Grace”的新数组,因为它们是“唯一的”。 我尝试了什么?
array_unique($filtredrow, "name");
但是在执行该功能之后,我只接收名称,而且还必须获得唯一人员的ID。
谢谢您的帮助!
编辑 这就是我想要得到的:
[2] => Array (
[name] => John
[id] => D
)
[4] => Array (
[name] => Grace
[id] => K
)
我尝试不保存数组中已经存在的元素的加载数据。
$rows=$mydb->get_resoults("SELECT DISTINCT name, id FROM DB", ARRAY_A);
foreach($rows as $key=>$row)
{
if($row[name]!=null && $row[id]!=null)
{
if($filtredrow[$key][name]!=$row[name])
{
$filtredrow[$key][name]=$row[name];
$filtredrow[$key][id]=$row[id];
}
}
}
但是它会保存所有值:/还会重复
答案 0 :(得分:1)
我将其放在开头,因为如果可能的话,我宁愿在数据库中执行此类操作。您可以更改查询以获得与所需结果类似的结果。
SELECT name, MIN(id) FROM your_table GROUP BY name
如果由于其他原因需要使用PHP进行此操作,则有几种不同的方法。
所有这些都涉及使用名称作为键将行分配给结果数组。
如果要保留每个名称的第一个实例,则在迭代输入数组时,如果结果数组中存在与行名匹配的键,则不要添加它。这样,您就可以在结果集中找到此人姓名的第一个实例。
foreach ($your_array as $person) {
if (!isset($unique[$person['name']]) {
$unique[$person['name']] = $person;
}
}
$unique = array_values($unique);
如果获取哪个ID无关紧要,则可以省去isset
检查。这样,您将得到结果集中每个人名字的最后一个实例,因为每次遇到重复时,该键都会被覆盖。
foreach ($your_array as $person) {
$unique[$person['name']] = $person;
}
$unique = array_values($unique);
如果需要保留所有与名称关联的ID,请将ID值附加到名称键下的数组中,而不要添加整行。
foreach ($your_array as $person) {
$people[$person['name']][] = $person['id];
}
这将给您类似的结果
['John' => ['D', 'U'], 'Grace' => ['K']];