Saya ingin memeriksa apakah dua array sama. Maksud saya: ukuran yang sama, indeks yang sama, nilai yang sama. Bagaimana saya bisa melakukan itu?
Menggunakan !==
seperti yang disarankan oleh pengguna, saya berharap bahwa yang berikut ini akan mencetak masuk jika setidaknya satu elemen dalam array (s) berbeda, tetapi pada kenyataannya tidak.
if (($_POST['atlOriginal'] !== $oldAtlPosition)
or ($_POST['atl'] !== $aext)
or ($_POST['sidesOriginal'] !== $oldSidePosition)
or ($_POST['sidesOriginal'] !== $sideext)) {
echo "enter";
}
=
terlalu banyak, seharusnya!==
atau!=
['a'] == [0]
adalahtrue
. Ya, ini baru PHP.Jawaban:
Lihat Operator Array .
EDIT
Operator ketidaksetaraan adalah
!=
sementara operator non-identitas adalah!==
untuk mencocokkan operator kesetaraan==
dan operator identitas===
.sumber
array_values($a)==array_values($b)
... Masalah lain yang biasa adalah tentang nilai-nilai unik, jadi ingatlah bahwa adaarray_unique()
.==
berfungsi terlepas dari urutan hanya untuk kamus khas seperti[1 => 'a', 2 => 'b']
. Untuk misalnya[1 => 'a', 2 => 'b'] == [2 => 'b', 1 => 'a']
. Untuk array yang diindeks seperti['a', 'b']
==
tidak berfungsi seperti yang dinyatakan. Untuk misalnya['a', 'b'] != ['b', 'a']
.['a', 'b']
adalah array[0 => 'a', 1 => 'b']
, sedangkan['b', 'a']
array[0 => 'b', 1 => 'a']
. Itu sebabnya mereka tidak memiliki pasangan kunci / nilai yang sama seperti yang dinyatakan dalam jawaban saya dan itulah mengapa==
tidak bekerja di antara mereka.Menurut halaman ini .
CATATAN: Jawaban yang diterima berfungsi untuk array asosiatif, tetapi tidak akan berfungsi seperti yang diharapkan dengan array yang diindeks (dijelaskan di bawah). Jika Anda ingin membandingkan keduanya, maka gunakan solusi ini. Juga, fungsi ini mungkin tidak berfungsi dengan array multidimensi (karena sifat fungsi array_diff).
Menguji dua array yang diindeks, elemen mana yang berbeda, menggunakan
$a == $b
atau$a === $b
gagal, misalnya:Itu karena di atas berarti:
array(0 => "x", 1 => "y")
vs.array(0 => "y", 1 => "x")
.Untuk mengatasi masalah itu, gunakan:
Membandingkan ukuran array ditambahkan (disarankan oleh super_ton) karena dapat meningkatkan kecepatan.
sumber
array_diff
dapat mempercepat perbandingan. Saya akan menambahkannya. Terima kasih$a = [1, 2, 2]; $b = [2, 1, 1];
dan kembalitrue
, tetapi dua array jelas tidak sama.Coba cerita bersambung. Ini akan memeriksa subarrays bersarang juga.
sumber
Solusi singkat yang bekerja bahkan dengan array kunci mana yang diberikan dalam urutan berbeda:
sumber
Bandingkan nilai-nilai ini sebagai nilai lain:
Anda dapat membaca tentang semua operator array di sini: http://php.net/manual/en/language.operators.array.php Perhatikan misalnya yang
===
juga memeriksa bahwa jenis dan urutan elemen dalam array adalah sama.sumber
===
tergantung pada perilaku yang diinginkan.!===
tidak akan berfungsi karena ini merupakan kesalahan sintaksis. Cara yang benar adalah!==
(bukan tiga simbol "sama dengan")sumber
Dari pov saya lebih baik menggunakan array_diff daripada array_intersect karena dengan pemeriksaan sifat ini perbedaan yang dihasilkan umumnya kurang dari kesamaan, dengan cara ini konversi bool lebih haus memori.
Sunting Catatan bahwa solusi ini untuk array sederhana dan melengkapi == dan === yang diposting di atas yang hanya berlaku untuk kamus.
sumber
array_diff - Menghitung perbedaan array
http://php.net/manual/en/function.array-diff.php
sumber
array_diff
tidak bisa memberitahumu itu. Cobaarray_diff([1, 2], [1, 2, 'hello'])
.Metode lain untuk memeriksa kesetaraan terlepas dari urutan nilai berfungsi dengan menggunakan http://php.net/manual/en/function.array-intersect.php , seperti:
Berikut adalah versi yang berfungsi juga dengan array multidimensi menggunakan http://php.net/manual/en/function.array-uintersect.php :
sumber
sumber
Satu cara: (menerapkan 'dianggap sama' untuk http://tools.ietf.org/html/rfc6902#section-4.6 )
Cara ini memungkinkan array asosiatif yang anggotanya dipesan secara berbeda - misalnya array dianggap sama di setiap bahasa kecuali php :)
sumber
$a[$key] = rksort($a[$key]);
Masalah sintaks pada array Anda
sumber
Berikut adalah contoh cara membandingkan dengan array dan mendapatkan apa yang berbeda di antara mereka.
Hasil:
sumber
Gunakan fungsi php array_diff (array1, array2);
Ini akan mengembalikan perbedaan antara array. Jika kosong maka mereka sama.
contoh:
Contoh 2:
sumber
(count(array_diff($a1, $a2)) + count(array_diff($a2, $a1))) === 0
untuk menguji apakah array "sama"Jika Anda ingin memeriksa array non asosiatif, inilah solusinya:
sumber