想象我得到了以下数组:
阵列(
[0] =>数组([id] => 1 [代码] =>' 342')
[1] =>数组([id] => 2 [代码] =>' 765')
[2] =>数组([id] => 3 [代码] =>' 134')
[3] =>数组([id] => 1 [代码] =>' 999'))
此处Array [0] [' id']和Array [3] [' id']与[' id']重复。我想删除其中一个(并不重要)。实际上我以为我找到了这个代码的解决方案:
//data
$row = $stmt->fetchALL(PDO::FETCH_ASSOC);
$ids = array();
for($i = 0;$i < count($row); $i++ )
{
if (in_array($row[$i]['id'], $ids))
{
unset($row[$i]);
continue;
}
$ids[] = $row[$i]['id'];
}
print_r($row);
由于某些原因,它适用于小型数组,但如果我有多个dublicates的很多值,它就会失败。有人建议我缺少什么吗?
答案 0 :(得分:1)
我认为这可以在没有循环的情况下完成。让我举个例子:
$rows = array (
array ('id' => 1, 'code' => '342'),
array ('id' => 2, 'code' => '765'),
array ('id' => 3, 'code' => '134'),
array ('id' => 1, 'code' => '342')
);
$input = array_map("unserialize", array_unique(array_map("serialize", $rows)));
echo '<pre>';
print_r($input);
输出:
Array
(
[0] => Array
(
[id] => 1
[code] => 342
)
[1] => Array
(
[id] => 2
[code] => 765
)
[2] => Array
(
[id] => 3
[code] => 134
)
)
答案 1 :(得分:1)
使用常规foreach
循环的简单解决方案:
$rows = [
['id' => 1, 'code' => '342'],
['id' => 2, 'code' => '765'],
['id' => 3, 'code' => '134'],
['id' => 1, 'code' => '342']
];
$ids = [];
foreach ($rows as $k => $item) {
if (in_array($item['id'], $ids)){
unset($rows[$k]);
} else {
$ids[] = $item['id'];
}
}
print_r($rows);