ฉันจะลบค่าที่ซ้ำกันออกจากอาร์เรย์ใน PHP ได้อย่างไร
ฉันจะลบค่าที่ซ้ำกันออกจากอาร์เรย์ใน PHP ได้อย่างไร
คำตอบ:
ใช้array_unique ()
ตัวอย่าง:
$array = array(1, 2, 2, 3);
$array = array_unique($array); // Array is now (1, 2, 3)
$array = array_unique($array, SORT_REGULAR);
ใช้ array_values(array_unique($array));
array_unique
: สำหรับอาร์เรย์ที่ไม่ซ้ำกัน
array_values
: สำหรับการทำดัชนีใหม่
array_unique
ส่งคืนออบเจ็กต์ที่มีคู่ของคีย์และค่าและarray_values
ส่งคืนเฉพาะค่าเป็นอาร์เรย์
//Find duplicates
$arr = array(
'unique',
'duplicate',
'distinct',
'justone',
'three3',
'duplicate',
'three3',
'three3',
'onlyone'
);
$unique = array_unique($arr);
$dupes = array_diff_key( $arr, $unique );
// array( 5=>'duplicate', 6=>'three3' 7=>'three3' )
// count duplicates
array_count_values($dupes); // array( 'duplicate'=>1, 'three3'=>2 )
สิ่งเดียวที่ใช้ได้ผลสำหรับฉันคือ:
$array = array_unique($array, SORT_REGULAR);
แก้ไข: SORT_REGULAR
คงลำดับเดิมของอาร์เรย์เดิม
$result = array();
foreach ($array as $key => $value){
if(!in_array($value, $result))
$result[$key]=$value;
}
บางครั้งarray_unique()
ไม่ใช่วิธีถ้าคุณต้องการได้รับรายการที่ซ้ำกันและซ้ำ ...
$unique=array("","A1","","A2","","A1","");
$duplicated=array();
foreach($unique as $k=>$v) {
if( ($kt=array_search($v,$unique))!==false and $k!=$kt )
{ unset($unique[$kt]); $duplicated[]=$v; }
}
sort($unique); // optional
sort($duplicated); // optional
ผลลัพธ์ใน
array ( 0 => '', 1 => 'A1', 2 => 'A2', ) /* $unique */
array ( 0 => '', 1 => '', 2 => '', 3 => 'A1', ) /* $duplicated */
เราสามารถสร้างอาเรย์ประเภทนี้เพื่อใช้ค่าสุดท้ายนี้จะถูกอัพเดตเป็นคอลัมน์หรือค่าคีย์และเราจะได้รับค่าที่ไม่ซ้ำจากอาเรย์ ...
$array = array (1,3,4,2,1,7,4,9,7,5,9);
$data=array();
foreach($array as $value ){
$data[$value]= $value;
}
array_keys($data);
OR
array_values($data);
explode(",", implode(",", array_unique(explode(",", $YOUR_ARRAY))));
สิ่งนี้จะดูแลการเชื่อมโยงหลักและเรียงลำดับคีย์สำหรับอาร์เรย์ใหม่ที่เป็นผลลัพธ์ :-)
explode("," $YOUR_ARRAY)
เมื่อ$YOUR_ARRAY
เป็นarray("1", "2", "3")
?
ฉันได้พบแล้วขึ้นอยู่กับขนาดของอาเรย์ของคุณ
$array = array_values( array_flip( array_flip( $array ) ) );
สามารถเร็วกว่า array_unique
นั่นเป็นวิธีที่ยอดเยี่ยมที่จะทำ อาจต้องการตรวจสอบให้แน่ใจว่าผลลัพธ์ที่ได้จะกลับอาร์เรย์อีกครั้ง ตอนนี้คุณจะแสดงเฉพาะค่าสุดท้ายเท่านั้น
ลองสิ่งนี้:
$arrDuplicate = array ("","",1,3,"",5);
foreach (array_unique($arrDuplicate) as $v){
if($v != "") { $arrRemoved[] = $v; }
}
print_r ($arrRemoved);
if (@!in_array($classified->category,$arr)){
$arr[] = $classified->category;
?>
<?php } endwhile; wp_reset_query(); ?>
ค่าการตรวจสอบครั้งแรกในอาร์เรย์และพบว่าค่าเดียวกันไม่สนใจมัน
ลบค่าที่ซ้ำกันออกจากอาเรย์แบบเชื่อมโยงใน PHP
$arrDup = Array ('0' => 'aaa-aaa' , 'SKU' => 'aaa-aaa' , '1' => '12/1/1' , 'date' => '12/1/1' , '2' => '1.15' , 'cost' => '1.15' );
foreach($arrDup as $k => $v){
if(!( isset ($hold[$v])))
$hold[$v]=1;
else
unset($arrDup[$k]);
}
Array ([0] => aaa-aaa [1] => 12/1/1 [2] => 1.15)
สามารถทำได้หลายวิธีซึ่งมีดังต่อไปนี้
//first method
$filter = array_map("unserialize", array_unique(array_map("serialize", $arr)));
//second method
$array = array_unique($arr, SORT_REGULAR);
หากคุณกังวลเรื่องประสิทธิภาพและมีอาเรย์อย่างง่ายให้ใช้:
array_keys(array_flip($array));
มันเร็วกว่า array_unique หลายเท่า
$a = array(1, 2, 3, 4);
$b = array(1, 6, 5, 2, 9);
$c = array_merge($a, $b);
$unique = array_keys(array_flip($c));
print_r($unique);
$arrDuplicate = array ("","",1,3,"",5);
foreach(array_unique($arrDuplicate) as $v){
if($v != "" ){$arrRemoved = $v; }}
print_r($arrRemoved);
function arrayUnique($myArray)
{
$newArray = Array();
if (is_array($myArray))
{
foreach($myArray as $key=>$val)
{
if (is_array($val))
{
$val2 = arrayUnique($val);
}
else
{
$val2 = $val;
$newArray=array_unique($myArray);
$newArray=deleteEmpty($newArray);
break;
}
if (!empty($val2))
{
$newArray[$key] = $val2;
}
}
}
return ($newArray);
}
function deleteEmpty($myArray)
{
$retArray= Array();
foreach($myArray as $key=>$val)
{
if (($key<>"") && ($val<>""))
{
$retArray[$key] = $val;
}
}
return $retArray;
}
ลองใช้โค้ดย่อและหวานนี้ -
$array = array (1,4,2,1,7,4,9,7,5,9);
$unique = array();
foreach($array as $v){
isset($k[$v]) || ($k[$v]=1) && $unique[] = $v;
}
var_dump($unique);
ผลผลิต -
array(6) {
[0]=>
int(1)
[1]=>
int(4)
[2]=>
int(2)
[3]=>
int(7)
[4]=>
int(9)
[5]=>
int(5)
}
if
ใช้เพียงแค่
<?php
$arr1 = [1,1,2,3,4,5,6,3,1,3,5,3,20];
print_r(arr_unique($arr1));
function arr_unique($arr) {
sort($arr);
$curr = $arr[0];
$uni_arr[] = $arr[0];
for($i=0; $i<count($arr);$i++){
if($curr != $arr[$i]) {
$uni_arr[] = $arr[$i];
$curr = $arr[$i];
}
}
return $uni_arr;
}
ที่นี่ฉันได้สร้างอาร์เรย์ว่างที่สองและใช้for
ลูปกับอาร์เรย์แรกที่มีการทำซ้ำ มันจะทำงานได้หลายครั้งตามการนับของอาร์เรย์แรก in_array
จากนั้นเมื่อเทียบกับตำแหน่งของอาร์เรย์กับอาร์เรย์แรกและจับคู่ว่ามีรายการนี้อยู่แล้วหรือไม่โดยใช้ array_push
ถ้าไม่ได้แล้วมันจะเพิ่มรายการที่ยังอาร์เรย์ที่สองกับ
$a = array(1,2,3,1,3,4,5);
$count = count($a);
$b = [];
for($i=0; $i<$count; $i++){
if(!in_array($a[$i], $b)){
array_push($b, $a[$i]);
}
}
print_r ($b);
foreach
วนซ้ำ
foreach
เพราะฉันสบายมากสำหรับวง แค่นั้นแหละ.
มันสามารถทำได้ผ่านฟังก์ชั่นฉันทำสามฟังก์ชั่นที่ซ้ำกันคืนค่าที่ซ้ำกันในอาร์เรย์
ฟังก์ชั่นที่สองเดียวคืนค่าเฉพาะที่เป็นค่าเฉลี่ยเดียวไม่ซ้ำในอาร์เรย์และฟังก์ชั่นที่สามและเต็มกลับค่าทั้งหมด แต่ไม่ได้ทำซ้ำถ้ามีค่าใด ๆ ที่ซ้ำกันมันจะแปลงเป็นเดี่ยว;
function duplicate($arr) {
$duplicate;
$count = array_count_values($arr);
foreach($arr as $key => $value) {
if ($count[$value] > 1) {
$duplicate[$value] = $value;
}
}
return $duplicate;
}
function single($arr) {
$single;
$count = array_count_values($arr);
foreach($arr as $key => $value) {
if ($count[$value] == 1) {
$single[$value] = $value;
}
}
return $single;
}
function full($arr, $arry) {
$full = $arr + $arry;
sort($full);
return $full;
}
ทางเลือกสำหรับ array_unique () ฟังก์ชั่น ..
การใช้อัลกอริทึมแรงเดรัจฉาน
// [1] อาร์เรย์ของเรามีรายการที่ซ้ำกัน
$ match = ["jorge", "melvin", "chelsy", "melvin", "jorge", "smith"];
// [2] คอนเทนเนอร์สำหรับอาร์เรย์ใหม่โดยไม่มีรายการที่ซ้ำกัน
$ arr = [];
// [3] รับความยาวของอาร์เรย์ที่ทำซ้ำและตั้งค่าเป็น var len เพื่อใช้สำหรับลูป
$ len = นับ ($ ตรงกัน);
// [4] หากตรงกับคีย์อาร์เรย์ ($ i) การวนซ้ำปัจจุบันไม่สามารถใช้ได้ // [4] อาร์เรย์ $ arr จากนั้นกดค่าคีย์การวนซ้ำปัจจุบันของการจับคู่ [$ i] // [4] ไปยังอาร์เรย์ arr
สำหรับ ($ i = 0; $ i
if(array_search($matches[$i], $arr) === false){ array_push($arr,$matches[$i]); } } //print the array $arr. print_r($arr); //Result: Array ( [0] => jorge [1] => melvin [2] => chelsy [3] => smith )
ฉันทำสิ่งนี้โดยไม่ใช้ฟังก์ชั่นใด ๆ
$arr = array("1", "2", "3", "4", "5", "4", "2", "1");
$len = count($arr);
for ($i = 0; $i < $len; $i++) {
$temp = $arr[$i];
$j = $i;
for ($k = 0; $k < $len; $k++) {
if ($k != $j) {
if ($temp == $arr[$k]) {
echo $temp."<br>";
$arr[$k]=" ";
}
}
}
}
for ($i = 0; $i < $len; $i++) {
echo $arr[$i] . " <br><br>";
}
Note that array_unique() is not intended to work on multi dimensional arrays.