Hướng dẫn php check undefined index array - php kiểm tra mảng chỉ mục không xác định

40

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang làm việc thông qua một số mã được thực hiện bởi một nhà phát triển trước đó. Tôi khá mới với PHP nên tôi tự hỏi liệu có bất kỳ mẫu hoặc giải pháp nổi tiếng nào cho vấn đề này không.

Về cơ bản, tác giả ban đầu không kiểm tra bất kỳ chỉ mục mảng nào trước khi anh ta cố gắng sử dụng chúng. Tôi biết tôi có thể sử dụng

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');

foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}
5 để kiểm tra mỗi lần trước khi nó được sử dụng, nhưng ngay bây giờ có hàng trăm dòng mà các lỗi này xuất hiện. Trước khi tôi đặt một số âm nhạc và bắt đầu đập đầu vào bàn phím của mình, tôi muốn chắc chắn rằng không có một số phím tắt đẹp để xử lý việc này. Đây là một phần điển hình của mã tôi đang xem:

    /* snip */
"text" => $link . $top_pick_marker . $output['author'] . " " .  " " . 
                              $output['new_icon'] . $output['rec_labels'] . "   " 
                    . $output['admin_link']
                    . $output['alternate_title'] 
                    . $output['access_info'] 
                    . $output['description'] 
                    . $output['url']
                    . $output['subject_terms'] 
                    . $output['form_subdivisions'] 
                    . $output['dates_of_coverage']  
                    . $output['update_frequency']  
                    . $output['place_terms'],
    /* snip */

Tôi biết tôi có thể sử dụng

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');

foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}
5 ở đây cho mỗi mục. Tôi sẽ phải sắp xếp lại mọi thứ một chút và loại bỏ tất cả các phép nối như bây giờ. Có cách nào khác để làm điều này hay tôi chỉ bị mắc kẹt với nó?

Hướng dẫn php check undefined index array - php kiểm tra mảng chỉ mục không xác định

Dharman ♦

28.2K21 Huy hiệu vàng75 Huy hiệu bạc127 Huy hiệu đồng21 gold badges75 silver badges127 bronze badges

hỏi ngày 28 tháng 7 năm 2009 lúc 17:31Jul 28, 2009 at 17:31

2

Tìm hiểu các phím là gì trong mảng đầu ra $ và điền vào các khóa bị thiếu bằng các chuỗi trống.

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');

foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}

Đã trả lời ngày 28 tháng 7 năm 2009 lúc 17:40Jul 28, 2009 at 17:40

5

Bạn có thể sử dụng isset () mà không mất kết nối:

//snip
$str = 'something'
 . ( isset($output['alternate_title']) ? $output['alternate_title'] : '' )
 . ( isset($output['access_info']) ? $output['access_info'] : '' )
 . //etc.

Bạn cũng có thể viết một hàm để trả về chuỗi nếu nó được đặt - điều này có thể không hiệu quả lắm:

function getIfSet(& $var) {
    if (isset($var)) {
        return $var;
    }
    return null;
}

$str = getIfSet($output['alternate_title']) . getIfSet($output['access_info']) //etc

Bạn sẽ không nhận được thông báo vì biến được truyền bằng tham chiếu.

Đã trả lời ngày 28 tháng 7 năm 2009 lúc 17:42Jul 28, 2009 at 17:42

Tom Haiight HaighTom Haigh

56.6K20 Huy hiệu vàng112 Huy hiệu bạc140 Huy hiệu đồng20 gold badges112 silver badges140 bronze badges

3

Một biến thể trong câu trả lời của Squarerootof2, nhưng điều này nên được đặt trước khi sử dụng đầu tiên của biến đầu ra $:

$keys = array('key1', 'key2', 'etc');
$output = array_fill_keys($keys, '');

Đã trả lời ngày 28 tháng 7 năm 2009 lúc 19:08Jul 28, 2009 at 19:08

1

Nếu bạn đang duy trì mã cũ, có lẽ bạn không thể nhắm đến "mã tốt nhất có thể" ... đó là một trường hợp khi, theo ý kiến ​​của tôi, bạn có thể hạ thấp cấp độ

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');

foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}
7.

Những "chỉ số không xác định" này chỉ nên là thông báo; Vì vậy, bạn có thể đặt cấp độ

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');

foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}
7 để loại trừ các thông báo.

Một giải pháp là với chức năng

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');

foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}
7, như thế này:

// Report all errors except E_NOTICE
error_reporting(E_ALL ^ E_NOTICE);

Điều tốt với giải pháp này là bạn chỉ có thể đặt nó để loại trừ các thông báo chỉ khi cần thiết (ví dụ, nếu chỉ có một hoặc hai tệp có loại mã đó)

Tuy nhiên, một giải pháp khác là thiết lập điều này trong php.ini (có thể không phải là một ý tưởng tốt nếu bạn đang làm việc trên một số ứng dụng, vì nó có thể che dấu các thông báo hữu ích); Xem

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');

foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}
7 trong php.ini.

Nhưng tôi nhấn mạnh: Điều này chỉ được chấp nhận bởi vì bạn đang duy trì một ứng dụng cũ - bạn không nên làm điều đó khi phát triển mã mới!

Đã trả lời ngày 28 tháng 7 năm 2009 lúc 17:46Jul 28, 2009 at 17:46

Pascal Martinpascal MartinPascal MARTIN

389K77 Huy hiệu vàng647 Huy hiệu bạc656 Huy hiệu Đồng77 gold badges647 silver badges656 bronze badges

2

Đặt từng chỉ mục trong mảng ở đầu (hoặc trước khi mảng

//snip
$str = 'something'
 . ( isset($output['alternate_title']) ? $output['alternate_title'] : '' )
 . ( isset($output['access_info']) ? $output['access_info'] : '' )
 . //etc.
1 được sử dụng) có lẽ sẽ là giải pháp dễ nhất cho trường hợp của bạn.

Thí dụ

$output['admin_link'] = ""
$output['alternate_title'] = ""
$output['access_info'] = ""
$output['description'] = ""
$output['url'] = ""

Cũng không thực sự liên quan đến trường hợp của bạn nhưng nơi bạn nói rằng bạn chưa quen với PHP và điều này không thực sự rõ ràng ngay lập tức

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');

foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}
5 có thể có nhiều đối số. Vì vậy, thay thế cho điều này:

if(isset($var1) && isset($var2) && isset($var3) ...){
    // all are set
}

Bạn có thể làm:

if(isset($var1, $var2, $var3)){
   // all are set 
}

Đã trả lời ngày 28 tháng 7 năm 2009 lúc 17:38Jul 28, 2009 at 17:38

MitmaromitmaroMitMaro

5.4376 Huy hiệu vàng30 Huy hiệu bạc52 Huy hiệu Đồng6 gold badges30 silver badges52 bronze badges

Một giải pháp ngắn là đây (PHP 5.3+):

$output['alternate_title'] = $output['alternate_title'] ?:'';

Bạn nhận được giá trị của biến, nếu nó không đánh giá sai hoặc biểu thức sai. (Cái sau ':')

Sử dụng toán tử ternary, không có tham số "nếu đúng", sẽ trả về kết quả của biểu thức kiểm tra (cái đầu tiên) vì đánh giá không xác định thành false, biểu thức sai sẽ được trả về.

Trong Php 7, có một toán tử kết hợp null thanh lịch hơn một chút:

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');

foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}
0

(Sẽ rất tốt với toán tử gán mặc định như '? =')

Đã trả lời ngày 17 tháng 2 năm 2016 lúc 21:47Feb 17, 2016 at 21:47

Hướng dẫn php check undefined index array - php kiểm tra mảng chỉ mục không xác định

Simon Rigétsimon RigétSimon Rigét

2.5195 huy hiệu vàng28 Huy hiệu bạc31 Huy hiệu đồng5 gold badges28 silver badges31 bronze badges

1

Ý tưởng tương tự như Michael Waterfall

Từ Codeigniter

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');

foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}
1

Đã trả lời ngày 12 tháng 12 năm 2011 lúc 19:27Dec 12, 2011 at 19:27

5

Trong trường hợp của tôi, tôi giúp nó hoạt động bằng cách xác định giá trị mặc định nếu dữ liệu đã gửi trống. Đây là những gì cuối cùng tôi đã làm (sử dụng Php7.3.5):default value if the submitted data is empty. Here is what I finally did (using PHP7.3.5):

//snip
$str = 'something'
 . ( isset($output['alternate_title']) ? $output['alternate_title'] : '' )
 . ( isset($output['access_info']) ? $output['access_info'] : '' )
 . //etc.
3

Đã trả lời ngày 10 tháng 7 năm 2019 lúc 0:57Jul 10, 2019 at 0:57

Hướng dẫn php check undefined index array - php kiểm tra mảng chỉ mục không xác định

JodyshopjodyshopJodyshop

6388 Huy hiệu bạc11 Huy hiệu đồng8 silver badges11 bronze badges

1

Bạn có thể thử sử dụng một hàm nhỏ đẹp sẽ trả về giá trị nếu nó tồn tại hoặc một chuỗi trống nếu không. Đây là những gì tôi sử dụng:

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');

foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}
2

Sau đó, bạn có thể sử dụng nó như thế này:

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');

foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}
3

Và nó sẽ không đưa ra bất kỳ lỗi nào!

Hi vọng điêu nay co ich!

Đã trả lời ngày 28 tháng 7 năm 2009 lúc 17:43Jul 28, 2009 at 17:43

Hướng dẫn php check undefined index array - php kiểm tra mảng chỉ mục không xác định

Thác nước Michael WatermichaelMichael Waterfall

20.4K26 Huy hiệu vàng110 Huy hiệu bạc166 Huy hiệu đồng26 gold badges110 silver badges166 bronze badges

3

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');

foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}
4

Đã trả lời ngày 12 tháng 2 năm 2014 lúc 3:30Feb 12, 2014 at 3:30

1

Làm cách nào để sửa chữa thông báo PHP không xác định?

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 Error_Reporting trong PHP. Tệp INI.ask PHP to stop generating such notices. You can either add a small line of code at the top of the PHP page or edit the field error_reporting in the php. ini file.

Làm cách nào để sửa lỗi bù không xác định trong PHP?

Lỗi này có nghĩa là trong mã của bạn, có một mảng và các khóa của nó.Nhưng bạn có thể đang cố gắng sử dụng khóa của một mảng không được đặt.Có thể tránh lỗi bằng cách sử dụng phương thức ISSET ().using the isset() method.

Làm thế nào kiểm tra biến được xác định trong PHP?

$ istouch = isset ($ biến);Nó sẽ trả về true nếu biến $ được xác định.Nếu biến không được xác định, nó sẽ trả về sai.Lưu ý: Nó trả về true nếu biến tồn tại và có một giá trị khác với null, sai nếu không. It will return true if the $variable is defined. If the variable is not defined it will return false . Note: It returns TRUE if the variable exists and has a value other than NULL, FALSE otherwise.

Chỉ số không xác định có nghĩa là gì trong PHP?

Lưu ý chỉ mục không xác định trong PHP là một lỗi xảy ra khi chúng ta cố gắng truy cập giá trị hoặc biến thậm chí không tồn tại trong thực tế.Chỉ mục không xác định là lỗi thông thường xuất hiện khi chúng tôi cố gắng truy cập biến không tồn tại.