Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyemak sama ada terdapat nilai pendua dalam tatasusunan dua dimensi dalam php

Bagaimana untuk menyemak sama ada terdapat nilai pendua dalam tatasusunan dua dimensi dalam php

PHPz
PHPzasal
2023-04-26 14:21:151052semak imbas

Dalam pengaturcaraan PHP, tatasusunan ialah jenis data yang sangat penting yang membolehkan kami menyimpan berbilang nilai dan mengaksesnya melalui kekunci. Tatasusunan dua dimensi ialah tatasusunan satu dimensi dengan dimensi tambahan, membolehkan kami menyimpan struktur data yang lebih kompleks. Walau bagaimanapun, dalam proses menggunakan tatasusunan dua dimensi, kita sering menghadapi masalah, iaitu bagaimana untuk mengesan sama ada terdapat nilai pendua dalam tatasusunan dua dimensi. Artikel ini akan memperkenalkan secara terperinci cara untuk menentukan sama ada terdapat nilai pendua dalam tatasusunan dua dimensi.

1. Apakah tatasusunan dua dimensi?

Sebelum memperkenalkan cara untuk menentukan sama ada terdapat nilai pendua dalam tatasusunan dua dimensi, kita perlu terlebih dahulu memahami apa itu tatasusunan dua dimensi. Seperti yang diperkenalkan secara ringkas di atas, tatasusunan dua dimensi menambah dimensi lain kepada tatasusunan satu dimensi Maksudnya, setiap elemen bukan lagi nilai tunggal, tetapi tatasusunan. Iaitu, setiap elemen ialah tatasusunan yang mengandungi berbilang nilai, yang boleh berupa rentetan, nombor, boolean, dsb. dari sebarang jenis.

Berikut ialah contoh tatasusunan dua dimensi yang mudah:

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

Dalam contoh ini, kami mentakrifkan tatasusunan dua dimensi $cars, yang mengandungi empat elemen tatasusunan, setiap satu Elemen mengandungi tiga nilai. Kita boleh mengakses nilai pertama elemen pertama dalam tatasusunan $cars melalui kod berikut:

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

2. Tentukan sama ada terdapat nilai pendua dalam tatasusunan dua dimensi

Dalam pembangunan sebenar, kita sering perlu menentukan sama ada terdapat nilai pendua dalam tatasusunan dua dimensi. Terdapat banyak cara untuk menyelesaikan masalah ini, dua daripadanya kami perkenalkan di sini.

1. Gunakan sarang gelung foreach

Gunakan sarang gelung foreach untuk melintasi setiap elemen dalam tatasusunan dua dimensi dan bandingkan nilainya secara bergilir. Langkah pelaksanaan khusus adalah seperti berikut:

① Tentukan tatasusunan kosong $hasil untuk menyimpan elemen tanpa nilai berulang

② Gunakan gelung foreach untuk melintasi tatasusunan dua dimensi asal $sumber dan; keluarkannya mengikut urutan Setiap elemen;

③ Gunakan gelung foreach sekali lagi dalam gelung dalam untuk melintasi tatasusunan $result, dan bandingkan sama ada elemen semasa adalah sama dengan setiap elemen yang telah disimpan dalam tatasusunan $result ;

④ Jika ia adalah sama, lompat keluar dari gelung dalam dan teruskan melintasi elemen seterusnya jika ia berbeza, simpan elemen semasa ke tatasusunan $result dan keluar dari gelung.

Kod khusus adalah seperti berikut:

$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 ) )

Dalam kod di atas, kita mula-mula menentukan tatasusunan kosong $result, dan kemudian menggunakan gelung foreach dua peringkat untuk melintasi dua asal tatasusunan berdimensi $sumber. Jika didapati bahawa nilai nama elemen semasa sudah wujud dalam tatasusunan $result, ia akan terus keluar dari gelung semasa dan terus melintasi elemen seterusnya jika tiada nilai pendua, elemen semasa akan disimpan dalam $tatasusunan hasil.

2. Gunakan array_unique fungsi tatasusunan terbina dalam PHP

PHP mempunyai array_unique fungsi tatasusunan terbina dalam, yang boleh digunakan untuk mengalih keluar nilai pendua dalam tatasusunan. Fungsi ini sangat mudah, anda hanya perlu menghantar tatasusunan sebagai parameter, dan ia akan mengembalikan tatasusunan baharu di mana semua nilai pendua telah dialih keluar. Jika anda ingin menggunakan fungsi array_unique untuk mengalih keluar nilai pendua dalam tatasusunan dua dimensi, kami boleh menggunakan kod berikut:

$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 ) )

Dalam kod di atas, kami mula-mula menggunakan fungsi array_column untuk mendapatkan nilai nama dalam semua tatasusunan dua dimensi, dan kemudian gunakan fungsi array_unique untuk mengalih keluar nilai pendua. Seterusnya, kami mengulangi tatasusunan dua dimensi asal sekali lagi, dan jika nilai nama elemen semasa wujud dalam $unique_arr, kami menyimpan elemen semasa ke tatasusunan $result.

Ringkasan:

Di atas ialah dua kaedah untuk menentukan sama ada terdapat nilai pendua dalam tatasusunan dua dimensi PHP Melalui kedua-dua kaedah ini, anda boleh dengan cepat menentukan sama ada terdapat unsur pendua dalam tatasusunan dua dimensi. Antaranya, kaedah menggunakan fungsi array_unique terbina dalam PHP adalah lebih mudah, tetapi ia juga menggunakan lebih banyak sumber pengkomputeran, manakala kaedah menggunakan dua peringkat foreach loop nesting adalah lebih fleksibel dan cekap. Pembangun boleh memilih kaedah yang sesuai dengan mereka berdasarkan keperluan khusus mereka.

Atas ialah kandungan terperinci Bagaimana untuk menyemak sama ada terdapat nilai pendua dalam tatasusunan dua dimensi dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn