在这个函数中,我正在过滤我的数据库输出。我不知道如何只获得唯一值。我的阵列:
[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];
}
}
}
但它保存所有值:/也重复
我会把它放在开头,因为如果可能的话,我宁愿在数据库中做这种类型的事情。您可以更改查询以获得您想要的结果。
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']];
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句