首頁  >  文章  >  後端開發  >  php怎麼檢查二維數組是否有重複值

php怎麼檢查二維數組是否有重複值

PHPz
PHPz原創
2023-04-26 14:21:151056瀏覽

在PHP程式設計中,陣列是一種非常重要的資料類型,它允許我們儲存多個值並透過鍵來存取它們。而二維數組就是在一維數組的基礎上,再增加了一維,讓我們可以儲存更複雜的資料結構。但是,在使用二維數組的過程中,我們經常遇到一個問題,那就是如何檢測二維數組中是否存在重複的值。本文將詳細介紹如何判斷二維數組是否存在重複值。

一、什麼是二維陣列?

在介紹如何判斷二維陣列是否存在重複值之前,我們需要先了解什麼是二維陣列。上文中已經簡單地介紹過了,二維數組是在一維數組的基礎上再增加了一維,也就是說,每個元素不再是一個單一的值,而是一個數組。也就是說,每個元素是一個包含多個值的數組,這些值可以是字串、數字、布林值等任何類型。

下面是一個簡單的二維數組範例:

$cars = array(
  array("Volvo",22,18),
  array("BMW",15,13),
  array("Saab",5,2),
  array("Land Rover",17,15)
);

在這個範例中,我們定義了一個二維數組$cars,它包含了四個數組元素,每個元素又包含了三個值。我們可以透過以下程式碼存取$cars數組中的第一個元素的第一個值:

echo $cars[0][0]; // 输出 Volvo

二、判斷二維數組是否存在重複值

在實際的開發中,我們經常需要判斷二維數組中是否存在重複值。這個問題的解決方法有很多種,我們在這裡介紹其中兩種方法。

1.使用foreach循環巢狀

使用foreach循環巢狀可以遍歷二維數組中的每個元素,並依序比較它們的值。具體的實作步驟如下:

① 定義一個空數組$result,用於保存沒有重複值的元素;

② 使用foreach循環遍歷原始的二維數組$source,依序取出每個元素;

③ 在內層循環中再次使用foreach循環遍歷$result數組,比較當前元素和已經保存在$result數組中的每個元素是否相同;

④如果相同,就跳出內層循環,繼續遍歷下一個元素;如果不同,則把目前元素儲存到$result數組中,然後退出循環。

具體的程式碼如下:

$source = array(  // 原始的二维数组
  array('name'=>'Tom','age'=>18),
  array('name'=>'Jack','age'=>23),
  array('name'=>'Mary','age'=>21),
  array('name'=>'Tom','age'=>20),
  array('name'=>'Jim','age'=>32)
);

$result = array();  // 存放没有重复值的元素

foreach ($source as $value) {
  $flag = true;  // 标记是否存在重复值
  foreach ($result as $v) {
    if ($value['name'] == $v['name']) {
      $flag = false;
      break;
    }
  }
  if ($flag) {
    $result[] = $value;
  }
}

print_r($result); // 输出结果:Array ( [0] => Array ( [name] => Tom [age] => 18 ) [1] => Array ( [name] => Jack [age] => 23 ) [2] => Array ( [name] => Mary [age] => 21 ) [4] => Array ( [name] => Jim [age] => 32 ) )

在上面的程式碼中,我們先定義了一個空數組$result,然後使用兩層foreach循環遍歷原始的二維數組$source 。如果發現目前元素的name值已經存在於$result數組中,就直接退出當前循環並繼續遍歷下一個元素;如果不存在重複值,則將當前元素保存到$result數組中。

2.使用PHP內建陣列函數array_unique

PHP內建了一個陣列函數array_unique,它可以用來移除陣列中的重複值。這個函數非常簡單,只需要傳入一個陣列作為參數,它就會傳回一個新的數組,該數組中所有的重複值都已經被移除了。如果要使用array_unique函數去除二維數組中的重複值,我們可以使用以下程式碼:

$source = array(  // 原始的二维数组
  array('name'=>'Tom','age'=>18),
  array('name'=>'Jack','age'=>23),
  array('name'=>'Mary','age'=>21),
  array('name'=>'Tom','age'=>20),
  array('name'=>'Jim','age'=>32)
);

$name_arr = array_column($source, 'name');  // 获取所有name值的数组
$unique_arr = array_unique($name_arr);  // 去重
$result = array();  // 存放没有重复值的元素
foreach ($source as $value) {
  if (in_array($value['name'], $unique_arr)) {
    $result[] = $value;
  }
}
print_r($result); // 输出结果:Array ( [0] => Array ( [name] => Tom [age] => 18 ) [1] => Array ( [name] => Jack [age] => 23 ) [2] => Array ( [name] => Mary [age] => 21 ) [4] => Array ( [name] => Jim [age] => 32 ) )

在上面的程式碼中,我們首先使用array_column函數取得了所有二維數組中的name值,然後使用array_unique函數去除了重複值。接下來,我們再次循環原始的二維數組,如果目前元素的name值在$unique_arr中存在,就把目前元素儲存到$result數組中。

總結:

以上就是判斷PHP二維陣列是否有重複值的兩種方法,透過這兩種方法可以快速判斷一個二維數組中是否存在重複元素。其中,使用PHP內建函數array_unique函數的方法更為簡單,但是相對而言也更為消耗計算資源,而使用兩層foreach循環嵌套的方式則更為靈活且高效。開發者可以根據自己的特定需求來選擇適合自己的方法。

以上是php怎麼檢查二維數組是否有重複值的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn