Nó khiến tôi phát điên ... Tôi cố gắng phân tích tệp CSV và có một hành vi rất lạ.
Đây là CSV
action;id;nom;sites;heures;jours i;;"un nom a la con";1200|128;;1|1|1|1|1|1|1Bây giờ mã PHP
$required_fields = array('id','nom','sites','heures','jours'); if (($handle = fopen($filename, "r")) !== FALSE) { $cols = 0; while (($row = fgetcsv($handle, 1000, ";")) !== FALSE) { $row = array_map('trim',$row); // Identify headers if(!isset($headers)) { $cols = count($row); for($i=0;$i<$cols;$i++) $headers[strtolower($row[$i])] = $i; foreach($required_fields as $val) if(!isset($headers[$val])) break 2; $headers = array_flip($headers); print_r($headers); } elseif(count($row) >= 4) { $temp = array(); for($i=0;$i<$cols;$i++) { if(isset($headers[$i])) { $temp[$headers[$i]] = $row[$i]; } } print_r($temp); print_r($temp['action']); var_dump(array_key_exists('action',$temp)); die(); } } }Và đầu ra
Array ( [0] => action [1] => id [2] => nom [3] => sites [4] => heures [5] => jours ) Array ( [action] => i [id] => [nom] => un nom a la con [sites] => 1200|128 [heures] => [jours] => 1|1|1|1|1|1|1 ) <b>Notice</b>: Undefined index: action in <b>index.php</b> on line <b>110</b> bool(false)"Hành động" chính tồn tại trong $ TEMP nhưng $temp['action'] returns Undefined và array_key_exists returns false. Tôi đã thử với một tên khóa khác, nhưng vẫn giống nhau. Và hoàn toàn không có vấn đề với các chìa khóa khác.
Có gì sai với điều này?
PS: line 110 is the print_r($temp['action']);
Chỉnh sửa 1
Nếu tôi thêm một trường trống khác trong CSV khi bắt đầu từng dòng, hãy hiển thị hành động một cách chính xác
;action;id;nom;sites;heures;jours ;i;;"un nom a la con";1200|128;;1|1|1|1|1|1|1PHP là ngôn ngữ kịch bản được sử dụng rộng rãi chủ yếu được sử dụng cho mục đích phát triển web. Đó là một ngôn ngữ kịch bản và tìm thấy ứng dụng trong các tác vụ tự động hóa mà không thể thực hiện chỉ với sự can thiệp của con người. Là một ngôn ngữ phía máy chủ, nó chủ yếu chăm sóc mọi thứ ở cuối máy chủ. Ra mắt vào năm 1995 để sử dụng công cộng, nó vẫn là một lựa chọn phổ biến trong số các nhà phát triển web kể từ đó. Lập trình là một công việc khó khăn. Nó là khá bình thường để vấp ngã vì lỗi và cảnh báo trong khi thực hiện một chương trình. Điều tương tự cũng xảy ra với các nhà phát triển PHP, như khi họ phải đối mặt với một chỉ số không xác định trong PHP. Tuy nhiên, những lỗi như vậy không khó để đối phó với một chút kiến thức và hướng dẫn. Các trang web thường sử dụng các biểu mẫu để thu thập dữ liệu từ khách truy cập. PHP sử dụng các phương thức $ get và $ post cho việc thu thập dữ liệu như vậy. Dữ liệu này được thu thập và lưu trong các biến được trang web sử dụng để làm việc và phục vụ khách truy cập hơn nữa. Nhiều lần, một số trường được người dùng để trống. Nhưng trang web cố gắng đề cập đến các lĩnh vực này để tiếp tục tiếp tục. Điều đó có nghĩa là mã PHP cố gắng để có được giá trị của trường mà không ai xác định được và do đó không tồn tại. Khá mong đợi, nó không hoạt động và nêu ra một thông báo gọi là & nbsp; Chỉ mục không xác định & nbsp; trong PHP. $ name = $ _get ['name']; $ name = $ _get ['name']; $ AGE = $ _GET ['Tuổi']; $ Lớp = $ _Get [‘Lớp]; echo 'Tên:'. $ Tên; Echo 'Tuổi:'. $ Tuổi; Echo ‘Lớp:‘. $ Lớp; ?> Bạn có thể sửa nó bằng hàm isset (), mà chúng tôi sẽ thảo luận thêm trong các phần sắp tới. Chỉ số không xác định là một thông báo trong PHP và đó là một lựa chọn của nhà phát triển để bỏ qua nó hoặc sửa nó. Chỉ số không xác định trong PHP là một thông báo được tạo bởi ngôn ngữ. Cách đơn giản nhất để bỏ qua một thông báo như vậy là yêu cầu PHP ngừng tạo các thông báo như vậy. Bạn có thể thêm một dòng mã nhỏ ở đầu trang PHP hoặc chỉnh sửa trường & nbsp; error_reporting & nbsp; trong tệp php.ini. Một cách đơn giản để yêu cầu PHP để vô hiệu hóa báo cáo thông báo là đặt một dòng mã ở đầu trang PHP. Hoặc bạn có thể thêm mã sau để dừng tất cả các báo cáo lỗi, Php.ini là một tệp cấu hình và rất cần thiết cho tất cả các chương trình chạy trên PHP. Mở tệp này và tìm trường & nbsp; error_Reporting. Cách dễ nhất là sử dụng phím tắt Ctrl + F. Theo mặc định, báo cáo lỗi được đặt thành e_all. Điều đó có nghĩa là tất cả các lỗi được báo cáo. Thay đổi điều này thành e_all & ~ e_notice. Nó có nghĩa là tất cả các lỗi ngoại trừ các thông báo bây giờ sẽ được báo cáo. Chúng tôi biết nguyên nhân của lỗi. Nó xảy ra khi chúng tôi sử dụng các phương thức $ _GET và $ _POST để nhận đầu vào, nhưng chúng tôi tham khảo nó ngay cả khi nó chưa được đặt. Giải pháp chỉ đơn giản là kiểm tra xem nó đã được đặt trước khi tham khảo. Chúng ta có thể sử dụng hàm isset (), trong đó kiểm tra xem biến có được đặt hay không trước khi tham chiếu đến chúng. Hàm isset () trả về đúng hoặc sai tùy thuộc vào nó.Lỗi chỉ số PHP không xác định là gì?
Code:
Result:
Làm thế nào để bỏ qua thông báo PHP: Chỉ mục không xác định?
1. Thêm mã ở đầu trang
Code:
2. Thay đổi trong php.ini & nbsp;
Làm thế nào để khắc phục thông báo PHP: Chỉ mục không xác định?
Chỉ mục không xác định trong PHP $ _GET
Khi sử dụng phương thức $ _GET, mã sau có thể hiển thị chỉ mục không xác định trong PHP:
Code:
$ name = $ _get ['name'];
$ name = $ _get ['name'];
$ AGE = $ _GET ['Tuổi'];
$ Lớp = $ _Get [‘Lớp];
echo 'Tên:'. $ Tên;
Echo 'Tuổi:'. $ Tuổi;
Echo ‘Lớp:‘. $ Lớp;
?>
Bạn có thể sửa nó bằng hàm isset (), mà chúng tôi sẽ thảo luận thêm trong các phần sắp tới.
Chỉ số không xác định là một thông báo trong PHP và đó là một lựa chọn của nhà phát triển để bỏ qua nó hoặc sửa nó.
Code:
$ name = $ _get ['name'];
if(isset($_GET['name'])){
$ name = $ _get ['name'];
}else{
$ AGE = $ _GET ['Tuổi'];
$ Lớp = $ _Get [‘Lớp];
if(isset($_GET['age'])){
echo 'Tên:'. $ Tên;
}else{
Echo 'Tuổi:'. $ Tuổi;
$ Lớp = $ _Get [‘Lớp];
if(isset($_GET['grade'])){
echo 'Tên:'. $ Tên;
}else{
Echo 'Tuổi:'. $ Tuổi;
$ Lớp = $ _Get [‘Lớp];
echo 'Tên:'. $ Tên;
Echo 'Tuổi:'. $ Tuổi;
Echo ‘Lớp:‘. $ Lớp;
?>
Result:
Thay vào đó, chúng ta có thể sử dụng một dòng mã như thế này.
Code:
$ name = $ _get ['name'];
$ name = ISSET ($ _ Nhận [‘Tên])? $ _Get [‘name,]: John John- Đây là tên mặc định của chúng tôi;
Echo ‘Tên:‘. $ Tên;
?>
Cách tiếp cận này cũng đạt được mục tiêu dự định.
Result:
Chú ý: Biến không xác định
PHP hiển thị thông báo này khi chúng tôi cố gắng sử dụng một biến ngay cả trước khi xác định nó.
Code:
$ name = $ _get ['name'];
$ name = ISSET ($ _ Nhận [‘Tên])? $ _Get [‘name,]: John John- Đây là tên mặc định của chúng tôi;
$ name = $ _get ['name'];
Result:
$ name = ISSET ($ _ Nhận [‘Tên])? $ _Get [‘name,]: John John- Đây là tên mặc định của chúng tôi;
Code:
$ name = $ _get ['name'];
$ name = ISSET ($ _ Nhận [‘Tên])? $ _Get [‘name,]: John John- Đây là tên mặc định của chúng tôi;
if(isset($name))
Echo ‘Tên:‘. $ Tên;
Cách tiếp cận này cũng đạt được mục tiêu dự định.
?>
Result:
Chú ý: Biến không xác định
Code:
$ name = $ _get ['name'];
$ name = ISSET ($ _ Nhận [‘Tên])? $ _Get [‘name,]: John John- Đây là tên mặc định của chúng tôi;
Echo ‘Tên:‘. $ Tên;
?>
Result:
Cách tiếp cận này cũng đạt được mục tiêu dự định.
Chú ý: Biến không xác định
PHP hiển thị thông báo này khi chúng tôi cố gắng sử dụng một biến ngay cả trước khi xác định nó.
Code:
$ name = $ _get ['name'];
$ name = ISSET ($ _ Nhận [‘Tên])? $ _Get [‘name,]: John John- Đây là tên mặc định của chúng tôi;
Echo ‘Tên:‘. $ Tên;
?>
Result:
Cách tiếp cận này cũng đạt được mục tiêu dự định.
Chú ý: Biến không xác định
Code:
$ name = $ _get ['name'];
$ name = ISSET ($ _ Nhận [‘Tên])? $ _Get [‘name,]: John John- Đây là tên mặc định của chúng tôi;
Echo ‘Tên:‘. $ Tên;
Cách tiếp cận này cũng đạt được mục tiêu dự định.
if(isset($nameArray[3]))
Chú ý: Biến không xác định
}
PHP hiển thị thông báo này khi chúng tôi cố gắng sử dụng một biến ngay cả trước khi xác định nó.
if(isset($nameArray[1]))
$ echo $ name;
Nó có thể được giải quyết bằng cách khai báo một biến toàn cầu và sau đó sử dụng isset () để xem nó có được đặt hay không. Nó chỉ có thể được lặp lại nếu nó đã được đặt. Ngoài ra, chúng ta có thể sử dụng & nbsp; isset (x)? Y & nbsp; để đặt mặc định.
tên toàn cầu $;
Cách tiếp cận này cũng đạt được mục tiêu dự định.
Chú ý: Biến không xác định
PHP hiển thị thông báo này khi chúng tôi cố gắng sử dụng một biến ngay cả trước khi xác định nó.
$ echo $ name;
Nó có thể được giải quyết bằng cách khai báo một biến toàn cầu và sau đó sử dụng isset () để xem nó có được đặt hay không. Nó chỉ có thể được lặp lại nếu nó đã được đặt. Ngoài ra, chúng ta có thể sử dụng & nbsp; isset (x)? Y & nbsp; để đặt mặc định.
Cách tiếp cận này cũng đạt được mục tiêu dự định.
if(!empty($nameArray[3]))
Chú ý: Biến không xác định
PHP hiển thị thông báo này khi chúng tôi cố gắng sử dụng một biến ngay cả trước khi xác định nó.
if(!empty($nameArray[4]))
$ echo $ name;
?>
Result:
Nó có thể được giải quyết bằng cách khai báo một biến toàn cầu và sau đó sử dụng isset () để xem nó có được đặt hay không. Nó chỉ có thể được lặp lại nếu nó đã được đặt. Ngoài ra, chúng ta có thể sử dụng & nbsp; isset (x)? Y & nbsp; để đặt mặc định.
tên toàn cầu $;
{echo $ name;