當前位置:首頁 » 編程語言 » php合並數組去重

php合並數組去重

發布時間: 2022-05-31 19:13:22

❶ 數組去重的5種方法

數組去重的5種方法:

方法一:

雙重for循環去重

原理 兩兩比較如果相等的話就刪除第二個

例如: 1 1 1 3 2 1 2 4

先讓第一個1 即arr[0]與後面的一個個比較 如果後面的值等於arr[0] 刪除後面的值

第一次結束後的結果是 1 3 2 2 4 刪除了後面所有的1

同理 第二次 第三會刪除與自己相同的元素

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

function noRepeat1(arr){

// 第一層for用來控制循環的次數

for(var i=0; i<arr.length; i++){

//第二層for 用於控制與第一層比較的元素

for(var j=i+1; j<arr.length; j++){

//如果相等

if(arr[i] == arr[j]){

//刪除後面的 即第 j個位置上的元素 刪除個數 1 個

arr.splice(j,1);

// j--很關鍵的一步 如果刪除 程序就會出錯

//j--的原因是 每次使用splice刪除元素時 返回的是一個新的數組

// 這意味這數組下次遍歷是 比較市跳過了一個元素

/*

例如: 第一次刪除後 返回的是 1 1 3 2 1 2 4

* 但是第二次遍歷是 j的值為2 arr[2] = 3

* 相當於跳過一個元素 因此要 j--

* */

j--;

}

}

}

return arr;

}

方法二:

單層for循環

原理和方法一相似

1

2

3

4

5

6

7

8

9

10

11

12

13

function norepeat(arr){

arr.sort();

//先排序讓大概相同的在一個位置,這里為什麼說是大概相同 是因為sort排序是把元素當字元串排序的 它和可能排成 1 1 10 11 2 20 3 ... 不是我們想要的從小到大

for(var i = 0; i < arr.length-1;i++){

//還是兩兩比較 一樣刪除後面的

if(arr[i]==arr[i+1]){

arr.splice(i,1);

//i-- 和j--同理

i--;

}

}

return arr;

}

方法三:

原理:用一個空數組去存首次出現的元素
利用 indexOf 屬性 indexOf是返回某個指定的字元在字元串中出現的位置,如果沒有就會返回-1
因此我們可以很好的利用這個屬性 當返回的是 -1時 就讓其存入數組

1

2

3

4

5

6

7

8

9

function noRepeat2(arr){

var newArr = [];

for(var i = 0; i < arr.length; i++){

if(newArr.indexOf(arr[i]) == -1){

newArr.push(arr[i]);

}

}

return newArr;

}

方法四:

原理:利用對象的思想,如果對象里沒有這個屬性的話就會返回undefined
利用這個原理當返回的是undefined時讓其放入數組然後在給這個屬性賦值

1

2

3

4

5

6

7

8

9

10

11

function norepeat3(arr) {

var obj = {};

var newArr = [];

for(var i = 0; i < arr.length; i++) {

if(obj[arr[i]] == undefined) {

newArr.push(arr[i]);

obj[arr[i]] = 1;

}

}

return newArr;

}

方法五:

原理:循環比較如果相等的讓後面的元素值為0,最後在輸出的時候刪除為0的這個前提是你的數據里不能有0,但是凡事可以變通你可以設置任何值替代這個0,這個方法是我當時想到實現的所以沒有進行很好的優化。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

var newArr = [];

//控制外循環

for(var i=0; i<arr.length-1;i++){

//內存循環 只比較後面的

for(j=i+1;j<arr.length;j++){

//如果相等就讓其值等於0

if(arr[i]==arr[j]){

arr[j]=0;

}

}

//去除值為0的

if(arr[i]==0){

continue;

}else{

//放入新的數組

newArr.push(arr[i]);

}

}

推薦教程:《php視頻教程》

以上就是數組去重的5種方法有哪些?的詳細內容,更多請關注php中文網其它相關文章!

❷ php數組去除重復的值

之前寫了一篇關於數組去重的文章,但是僅限於一維數組。下面的函數可以用於二維數組:
//二維數組去掉重復值
function array_unique_fb($array2D){foreach ($array2D as $v){$v = join(",",$v); //降維,也可以用implode,將一維數組轉換為用逗號連接的字元串
$temp[] = $v;}
$temp = array_unique($temp); //去掉重復的字元串,也就是重復的一維數組
foreach ($temp as $k => $v){$temp[$k] = explode(",",$v); //再將拆開的數組重新組裝}return $temp;}
如果你想保留數組的鍵值,可以用下面的函數:
//二維數組去掉重復值 並保留鍵值
function array_unique_fb($array2D){foreach ($array2D as $k=>$v){$v = join(",",$v); //降維,也可以用implode,將一維數組轉換為用逗號連接的字元串
$temp[$k] = $v;}$temp = array_unique($temp); //去掉重復的字元串,也就是重復的一維數組
foreach ($temp as $k => $v){$array=explode(",",$v); //再將拆開的數組重新組裝
$temp2[$k]["id"] =$array[0];
$temp2[$k]["litpic"] =$array[1];
$temp2[$k]["title"] =$array[2];
$temp2[$k]["address"] =$array[3];
$temp2[$k]["starttime"] =$array[4];
$temp2[$k]["endtime"] =$array[5];
$temp2[$k]["classid"] =$array[6];
大概就這樣啦。
以上回答你滿意么?

❸ PHP合並數組幾種方式總結

PHP 中的 array_merge()、array_merge_recursive()函數可以實現

array_merge() 函數把兩個或多個數組合並為一個數組。

如果鍵名有重復,該鍵的鍵值為最後一個鍵名對應的值(後面的覆蓋前面的)。如果數組是數字索引的,則鍵名會以連續方式重新索引。

注意:如果僅僅向 array_merge() 函數輸入了一個數組,且鍵名是整數,則該函數將返回帶有整數鍵名的新數組,其鍵名以 0 開始進行重新索引。

array_merge(array1,array2,array3...)

參數說明
array1 必需。輸入的第一個數組。
array2 必需。輸入的第二個數組。
array3 可選。可指定的多個輸入數組。

例如:
<?php
$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge($a1,$a2));
?>

輸出:

Array ( [a] => Horse [b] => Cat [c] => Cow )

僅使用一個數組參數:

<?php
$a=array(3=>"Horse",4=>"Dog");
print_r(array_merge($a));
?>

輸出:

Array ( [0] => Horse [1] => Dog )

array_merge_recursive() 函數與array_merge()函數不同的是,當有重復的鍵名時,值不會被覆蓋,而是將多個相同鍵名的值遞歸組成一個數組。

例如:
<?php
$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge_recursive($a1,$a2));
?>

輸出:

Array (
[a] => Horse
[b] => Array ( [0] => Dog [1] => Cat )
[c] => Cow
)

❹ php 多個一維關聯數組去重

因為不太了解你其他業務,這里通過對多個數組觀察發現,他們的鍵名都是一致的。所以有2個簡單的辦法

(1)先翻轉一維數組,然後進行合並,再翻轉回來

這里就不寫詳細代碼,寫下簡單過程

  1. $array_a =array_flip($array_a);

    這樣交換後的數組內容如下

    Array
    (
    [DHL] =>carrier
    )

    Array
    (
    [HKPT] =>carrier
    )

    ....

  2. 合並數組,使用array_merge,數組中有相同的字元串鍵名,則該鍵名後面的值將覆蓋前一個值

    $mergeArray = array_merge($array_a,$array_b,$array_c...);

    這樣得到一個數組,裡面的元素都是鍵名不重復的,內容如下

    Array

    (

    [DHL] =>carrier

    [HKPT] =>carrier

    ....

    )

  3. 還原數組,這里如果要完全打散成一個一個的一維數組,就直接array_shift,同時翻轉回來

    $array_a =array_shift($mergeArray);$array_a =array_flip($array_a);

    $array_b =array_shift($mergeArray);$array_b=array_flip($array_b);

    ...

    這里一個一個執行可以用for循環替代,數組中有多少個元素就執行多少次,




(2)最簡單的辦法,只從你提供的例子來說,鍵名都一樣,直接先去掉鍵名,然後組合成一個數字索引的數組,直接array-unique,再把鍵名放回去


如果有不清楚可以發消息

❺ PHP二維數組如何實現去除重復項

PHP數組去除重復項有個內置函數array_unique(),但是php的array_unique函數只適用於一維數組,對多維數組並不適用,不過你可以在二維數組中的值,用array_unique()即可。

比如:

$array = array(array(1,1,2),array(2,3,4,3));

$temp_array = array();
foreach($array as $key=>$value){

$temp_array[$key] = array_unique($value);
}

$array = $temp_array;

❻ 【php】合並多個數組並去掉相同的

你是要把$tpid數組的內容合並嗎,可以先弄了一個空數組,for裡面歸並到這個空數組,for結束之後進行唯一處理,大致邏輯如下:
<?php
$result=Array();
for($i=0;$i<$num;$i++){
$tpid=$data[$i]['busitype'];
$tpid=explode(".",$tpid,-1);
print_r($tpid);
echo
"<br>";
$result=array_merge($result,$tpid);
}
$result=array_unique($result);
?>
補充:
那是array_merge的問題,重復的下標會被合並,你試試看使用array_merge_recursive吧,我無法測試程序,沒有你的數據。

❼ php數組怎麼去除重復的數組值

array_unique() 函數定義和用法
移除數組中的重復的值,並返回結果數組。
當幾個數組元素的值相等時,只保留第一個元素,其他的元素被刪除。
返回的數組中鍵名不變。
<?php
$a=array("a"=>"XX","b"=>"D","c"=>"XX");
print_r(array_unique($a));
?>
輸出:Array ( [a] => XX [b] => D)

❽ php裡面如何合並數組

可以使用函數array_merge();

❾ php 大數組合並去重 兩個數組元素都過萬

過萬沒關系,如果一個數組內容佔一個機器字長,1萬才10K WORD而已,現在機器內存很大,幾千萬都瞬間就處理完了,完全可以按照一般方法編程

一般方法的合並數組,要看小標是0、1、2、....還是其它的關鍵字,相同下標的合並還是相同值的合並,具體細節有區別,流程都是一樣的:兩次for each把兩個數組的內容添加到新數組裡面。

❿ 關於php 數組合並去重問題

你的數組源一看就不是php數組!! 轉化後的結構也不是php數組。
php數據結構是 array(key => value); 而且在php數組中,如果有重復的key,則value值會覆蓋之前的數據。

熱點內容
光遇安卓怎麼能加到ios 發布:2025-02-11 10:20:16 瀏覽:690
優勢存儲 發布:2025-02-11 10:20:14 瀏覽:362
光貓wifi怎麼改密碼 發布:2025-02-11 10:17:51 瀏覽:167
web和伺服器怎麼寫通訊 發布:2025-02-11 10:08:06 瀏覽:979
安卓升級後手機變卡怎麼辦 發布:2025-02-11 09:58:01 瀏覽:113
土工資料庫 發布:2025-02-11 09:48:55 瀏覽:963
libxml2編譯 發布:2025-02-11 09:48:45 瀏覽:745
java類的復制 發布:2025-02-11 09:48:45 瀏覽:601
127小時ftp 發布:2025-02-11 09:47:10 瀏覽:852
安卓怎麼看蘋果手機的行駛軌跡 發布:2025-02-11 09:26:19 瀏覽:885