Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menentukan sama ada nilai berada dalam tatasusunan dua dimensi dalam php

Bagaimana untuk menentukan sama ada nilai berada dalam tatasusunan dua dimensi dalam php

PHPz
PHPzasal
2023-04-18 09:05:36540semak imbas

Dengan pembangunan Internet yang berterusan, pembangunan laman web telah menjadi semakin biasa. PHP ialah bahasa pembangunan yang sangat popular, dan banyak laman web dibangunkan menggunakan PHP. Dalam pembangunan PHP, tatasusunan dua dimensi sering digunakan, yang boleh menyimpan dan mencari jumlah data tertentu dengan mudah. Artikel ini akan memperkenalkan cara untuk menentukan sama ada nilai berada dalam tatasusunan dua dimensi dalam PHP.

Pertama, kita perlu memahami konsep tatasusunan dua dimensi. Ringkasnya, tatasusunan dua dimensi ialah tatasusunan di mana setiap elemen juga tatasusunan. Setiap subarray mempunyai nilai kunci yang sepadan, dan subarray ini boleh diakses melalui kekunci tatasusunan dua dimensi. Sebagai contoh, berikut ialah tatasusunan dua dimensi yang ringkas:

$people = array(
    array(
        "name" => "John",
        "age" => 25,
        "gender" => "male"
    ),
    array(
        "name" => "Jane",
        "age" => 30,
        "gender" => "female"
    ),
    array(
        "name" => "Bob",
        "age" => 20,
        "gender" => "male"
    )
);

Tatasusunan dua dimensi di atas mewakili maklumat tiga orang dan setiap orang disimpan dalam sub-tatasusunan. Setiap subarray mempunyai tiga nilai utama: name mewakili nama, age mewakili umur dan gender mewakili jantina. Sekarang, kita ingin menentukan sama ada seseorang berada dalam tatasusunan ini, apakah yang perlu kita lakukan?

Cara mudah ialah menggunakan gelung foreach untuk melelaran melalui tatasusunan. Untuk setiap subarray, kita boleh menyemak satu persatu sama ada nilai kuncinya sepadan dengan nilai yang kita cari. Kod kelihatan seperti ini:

function in_array_2d($needle, $haystack) {
    foreach ($haystack as $item) {
        foreach ($item as $key => $value) {
            if ($value == $needle) {
                return true;
            }
        }
    }
    return false;
}

$person = array(
    "name" => "Jane",
    "age" => 30,
    "gender" => "female"
);

if (in_array_2d("male", $people)) {
    echo "The array contains a male person.";
} else {
    echo "The array does not contain a male person.";
}

if (in_array_2d($person, $people)) {
    echo "The array contains the person Jane.";
} else {
    echo "The array does not contain the person Jane.";
}

Kod di atas mentakrifkan fungsi in_array_2d yang menerima dua parameter: nilai untuk dicari dan tatasusunan 2D untuk dicari. Terdapat dua foreach gelung bersarang dalam fungsi, yang digunakan untuk melintasi nilai kunci dalam semua sub-tatasusunan. Fungsi mengembalikan true jika nilai yang sepadan ditemui, jika tidak false dikembalikan. Ambil perhatian bahawa dalam contoh kedua, kami menggunakan tatasusunan bersekutu untuk mewakili maklumat tentang orang yang kami cari.

Walaupun pelaksanaan di atas sangat mudah, ia tidak begitu cekap. Jika tatasusunan dua dimensi yang anda cari adalah besar, melintasi keseluruhan tatasusunan boleh memakan masa yang lama. Oleh itu, kita memerlukan kaedah yang lebih cekap.

Cara yang lebih baik ialah menggunakan fungsi array_column PHP. Fungsi ini boleh mengembalikan elemen atau pasangan nilai kunci yang ditentukan dalam tatasusunan. Contohnya, jika kita ingin mendapatkan nama semua orang daripada tatasusunan 2D di atas, kita boleh menggunakan kod berikut:

$names = array_column($people, "name");
print_r($names);

Ini akan mengeluarkan yang berikut:

Array
(
    [0] => John
    [1] => Jane
    [2] => Bob
)

Sekarang, Kita hanya perlu mencari nilai yang kita cari dalam tatasusunan yang dikembalikan untuk menentukan sama ada ia berada dalam tatasusunan dua dimensi. Berikut ialah kod pelaksanaan:

function in_array_2d($needle, $haystack) {
    $values = array_column($haystack, null, 0);
    return in_array($needle, $values);
}

$person = array(
    "name" => "Jane",
    "age" => 30,
    "gender" => "female"
);

if (in_array_2d("male", $people)) {
    echo "The array contains a male person.";
} else {
    echo "The array does not contain a male person.";
}

if (in_array_2d($person, $people)) {
    echo "The array contains the person Jane.";
} else {
    echo "The array does not contain the person Jane.";
}

Kod di atas melaksanakan fungsi in_array_2d, tetapi ia lebih rumit sedikit. Mula-mula, kami menggunakan fungsi array_column untuk mendapatkan elemen pertama semua sub-tatasusunan dalam tatasusunan dua dimensi untuk dicari dan menggunakannya sebagai kunci tatasusunan baharu. Dengan cara ini, kita boleh menggunakan fungsi in_array untuk menyemak sama ada nilai yang kita cari berada dalam tatasusunan baharu. Ambil perhatian bahawa dalam contoh kedua, kami menggunakan tatasusunan bersekutu untuk mewakili maklumat tentang orang yang kami cari.

Kelebihan menggunakan fungsi array_column ialah kita boleh mendapatkan nilai tertentu dalam sub-array dengan menyatakan kunci. Ini bermakna kita boleh mencari subarray yang mengandungi nilai khusus daripada tatasusunan 2D dengan mudah. Berikut ialah contoh:

$male = array_column($people, null, "gender")["male"];
print_r($male);

Ini akan mengeluarkan sub-tatasusunan yang mengandungi maklumat lelaki.

Walaupun kaedah di atas boleh digunakan untuk menentukan sama ada nilai berada dalam tatasusunan dua dimensi, kecekapan dan kebolehbacaannya adalah berbeza. foreachGelung mungkin yang paling mudah difahami, tetapi ia kurang cekap. Fungsi array_column lebih cekap untuk tatasusunan 2D yang besar, tetapi ia memerlukan lebih banyak kod untuk dilaksanakan. Oleh itu, apabila memilih kaedah, keputusan kaedah mana yang lebih sesuai perlu dibuat berdasarkan kes demi kes.

Atas ialah kandungan terperinci Bagaimana untuk menentukan sama ada nilai berada 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