php中刪除陣列元素的幾種方式

2021-06-13 13:00:51 字數 1311 閱讀 5610

php的陣列沒有remove方法,以前到覺得沒什麼,但今晚被狠狠坑了一把。

$data是乙個關聯陣列,其中包括了型別為整數,字串或陣列的元素。我需要從$data中取出$data['x']這個元素,$data['x']也是個陣列,然後將$data['x']從$data中刪除。就是這麼個小功能而已,我先後嘗試了以下幾種方式。

遍歷$data,把除$data['x']之外的所有元素放入另乙個臨時陣列$tmp,最後在把$tmp賦值給$data。這個辦法實在是土到家了,效率也低,感覺寫出來都害臊。但是呢,安全,不會出什麼亂子。

$tmp = array();

foreach ($data as $d)

if ($d !== $data['x'])

$tmp = $d;

$data = $tmp;

用array_diff()函式,求array($data['x'])和$data兩個陣列的差集。使用了php內建函式,看起來洋氣一些了。但是在$data的元素有多種型別的時候這並不是乙個好辦法。比如$data的元素$data['x']是乙個陣列,而$data中的其他元素都是字串,那麼呼叫array_diff()時php會嘗試把陣列轉換為字串的。我實驗的時候雖然執行結果是對的,但php報出了警告資訊。如果$data的元素型別是單一的,使用這種方法挺好。

$data = array_diff($data, array($data['x']));

用unset()銷毀$data['x']。很有效的辦法,我最終採用的是這個。

unset($data['x']);

在網上還看到用array_splice()函式模擬array_remove()行為的方法,其主要的優點是在刪除某個元素後能保持索引連續,在有些情況中這一點很重要。但傳給函式的offset值一般是實現不知道的,如果再加上個計算offset的步驟又太繁瑣了。其實,我這裡提到的三種方法,哪怕是最土的第一種,都是將$data這個關聯陣列當作字典來對待,所以每種方法都是直接通過$data['x']指定要刪除的元素,而不像模擬array_remove()方法中根據要刪除元素在陣列中的位置來指定。

php沒有區分對待array,list,dictionary,hash_table等,它們本質上都是array,配合各種函式它在不同的上下文中有著不同的行為,也就擔任了不同的角色。這種設計自然有它的優點,用一種資料型別幹了n種資料型別的事。但在開發中array有時候還是會顯得太簡單了一些,這時候就得自己去實現乙個用起來更順手的dictionary或hash_table什麼的,相比之下python在列表處理方面就強了很多。

幾種php刪除陣列元素方法

幾種php 刪除陣列元素方法在很多情況下我們的陣列會出現重複情況,那我們刪除陣列中一些重複的內容怎麼辦,這些元素我必須保持他唯一,所以就想辦法來刪除它們,下面利用了遍歷查詢來刪除重複陣列元素的幾種方法幾種php 刪除陣列元素方法在很多情況下我們的陣列會出現重複情況,那我們刪除陣列中一些重複的內容怎麼...

JS 刪除陣列中某個元素的幾種方式

目錄 第一種 刪除最後乙個元素 pop 刪除 slice 刪除 splice 刪除 for 刪除 length 刪除 第二種 刪除第乙個元素 shift 刪除 slice 刪除 splice 刪除 第三種 刪除陣列中某個指定下標的元素 splice 刪除 for 刪除 第四種 刪除陣列中某個指定元素...

php中刪除陣列元素

users array 1 張三 2 李四 3 王五 print r users echo unset users 2 print r users echo student array 1 mike 2 tom 3 jerry 4 lucy 5 lili array splice student,3...