Rumah > pembangunan bahagian belakang > masalah PHP > Mengapa pembolehubah dalam nilai tatasusunan dua dimensi kelas php melaporkan ralat?

Mengapa pembolehubah dalam nilai tatasusunan dua dimensi kelas php melaporkan ralat?

PHPz
Lepaskan: 2023-04-27 09:30:54
asal
605 orang telah melayarinya

Dalam PHP, kami boleh menggunakan kelas untuk menentukan beberapa jenis data yang kompleks untuk mencapai modularisasi dan penggunaan semula kod yang lebih fleksibel, dan tatasusunan dua dimensi ialah salah satu jenis data yang biasa digunakan dalam PHP. Boleh digunakan untuk menyimpan data berstruktur yang kompleks. Tetapi kadangkala apabila menggunakan kelas dan tatasusunan dua dimensi, anda mungkin menghadapi ralat yang disebabkan oleh pembolehubah yang terkandung dalam nilai. Berikut akan membincangkan cara menyelesaikan masalah ini melalui analisis kes dan penyelesaian.

Latar Belakang Kes

Dalam projek PHP tertentu, beberapa maklumat pelajar perlu disimpan dalam tatasusunan dua dimensi dan dikumpulkan mengikut gred dan kelas. Pertama, kelas bernama Pelajar ditakrifkan, kodnya adalah seperti berikut:

class Student {
    public $name;
    public $age;
    public $grade;
    public $class;
}
Salin selepas log masuk

Kemudian tatasusunan dua dimensi bernama $students ditakrifkan untuk menyimpan berbilang contoh Pelajar, kodnya adalah seperti berikut:

$students = [
    ['name' => '张三', 'age' => 18, 'grade' => 1, 'class' => 1],
    ['name' => '李四', 'age' => 19, 'grade' => 1, 'class' => 2],
    ['name' => '王五', 'age' => 18, 'grade' => 2, 'class' => 1],
    ['name' => '赵六', 'age' => 19, 'grade' => 2, 'class' => 2]
];
Salin selepas log masuk

Seterusnya, maklumat pelajar ini perlu dikumpulkan mengikut gred dan kelas, dan kemudian mengira bilangan orang dalam setiap kumpulan. Kodnya adalah seperti berikut:

$count = [];
foreach ($students as $student) {
    $count[$student['grade']][$student['class']]++;
}
Salin selepas log masuk

Tetapi apabila anda menjalankan kod di atas, anda akan menemui mesej ralat:

PHP Warning:  Undefined offset: 1
Salin selepas log masuk

Analisis Masalah

Dalam kod di atas, $ pembolehubah kira ialah tatasusunan dua dimensi $pelajar['gred'] dan $pelajar['kelas'] digunakan untuk mendapatkan maklumat gred dan kelas setiap pelajar ini digunakan sebagai subskrip sekunder bagi $count tatasusunan untuk melaksanakan statistik kumpulan maklumat pelajar. Walau bagaimanapun, dalam tatasusunan $count, subskrip peringkat kedua yang sepadan mula dikira dari 0, manakala maklumat gred dan kelas dalam $student['grade'] dan $student['class'] kedua-duanya mula mengira dari 1. , oleh itu, sisihan berlaku apabila mengakses tatasusunan dua dimensi.

Selain itu, nilai dalam tatasusunan $count pada mulanya adalah batal, dan jenis nilai adalah integer, oleh itu, apabila menambah 1 padanya, penukaran jenis nilai akan berlaku dan ralat akan berlaku. Ini juga salah satu punca kesilapan.

Penyelesaian

Untuk menyelesaikan masalah di atas, kod perlu dilaraskan dengan sewajarnya. Khususnya, nilai $student['gred'] dan $student['class'] masing-masing boleh dikurangkan sebanyak 1 untuk menyesuaikan diri dengan keperluan subskrip tatasusunan $count. Pada masa yang sama, tatasusunan $count perlu dimulakan untuk mengelakkan ralat penukaran jenis.

Kod refactored adalah seperti berikut:

$count = [];
foreach ($students as $student) {
    $grade = $student['grade'] - 1;
    $class = $student['class'] - 1;
    if (!isset($count[$grade][$class])) {
        $count[$grade][$class] = 0;
    }
    $count[$grade][$class]++;
}
Salin selepas log masuk

Dalam kod baharu ini, kami mula-mula menurunkan nilai $student['gred'] dan $student['class'] oleh 1 masing-masing , dan kemudian tentukan sama ada subskrip sekunder yang sepadan wujud dalam tatasusunan $count Jika ia tidak wujud, ia dimulakan kepada 0. Selepas itu, apabila menambah 1 pada tatasusunan $count, tidak akan ada ralat penukaran jenis dan masalah subskrip di luar sempadan.

Kesimpulan

Dalam PHP, kelas dan tatasusunan biasanya digunakan jenis data, tetapi kerumitan dan fleksibilitinya kadangkala membawa kepada beberapa masalah. Bermula daripada contoh, artikel ini menganalisis secara terperinci sebab pembolehubah dalam nilai dalam kelas dan tatasusunan melaporkan ralat, serta cara melaraskan dan menambah baik penyelesaian. Saya harap kandungan ini boleh memberi inspirasi dan membantu pembangun PHP.

Atas ialah kandungan terperinci Mengapa pembolehubah dalam nilai tatasusunan dua dimensi kelas php melaporkan ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan