如何从多个数组中删除重复项?
pinky
和cocos
在我的数组中是双倍的。所有双精度字都必须删除。如果删除这些词,我会把这些词放在我的选择中。我从我的数据库中得到这些词。
查询:
$queryClient = " SELECT DISTINCT `clients` FROM `reps` WHERE `clients` != ''";
这是我的代码:
while($row = mysql_fetch_assoc($resultClient)){
$names = explode(",", $row['clients']);
echo '<pre>'; print_r($names); echo '</pre>';
}
结果:(那些食物词只是一个例子)
Array
(
[0] => chocolate
)
Array
(
[0] => vanilla
[0] => cocos
)
Array
(
[0] => strawberry
)
Array
(
[0] => pinky
[1] => watermelon
[2] => melon
[3] => cocos
)
Array
(
[0] => pinky
)
Array
(
[0] => dark-chocolate
)
我在while循环中尝试了这个,但它不起作用:
$array = array_unique($names, SORT_REGULAR);
如何删除所有重复项?你能帮助我还是有解决我的问题的方法?帮助。
这是一个单行:
print_r(array_unique(call_user_func_array('array_merge', $names)));
首先将所有子数组合并为一个,然后获取唯一值。
完整示例:
$names = array();
while($row = mysql_fetch_assoc($resultClient)){
$names[] = explode(",", $row['clients']);
}
print_r(array_unique(call_user_func_array('array_merge', $names)));
你可以做一个小技巧:
展平,计数,然后删除除最后一个之外的所有内容。
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
$flatArray = [];
foreach($it as $v) {
$flatArray[] = $v; //Flatten array
}
//Note you can do array_unique on the flat array if you also need to flatten the array
$counts = array_count_values($flatArray); //Count
foreach ($array as &$subarray) {
foreach ($subarray as $index => $element) {
$counts[$element]--;
if ($counts[$element] > 0) { //If there's more than 1 left remove it
unset($subarray[$index]);
}
}
}
这将删除完全嵌套在第 2 层的重复项,而不会平展原始数组。
http://sandbox.onlinephpfunctions.com/code/346fd868bc89f484dac48d12575d678f3cb53626
首先,您需要先加入数组,然后才能过滤掉重复项:
<?php
$allNames = [];
while($row = mysql_fetch_assoc($resultClient)){
$names = explode(",", $row['food']);
$allNames[] = $names;
}
$allNames = array_merge(...$allNames); //Join everything to a one dimensional array
$allNames = array_unique($allNames); // Only keep unique elementes
print_r($allNames);