2013-07-05 41 views
13

tôi đã có một số ba giá trị như thế này:PHP assign đầu tiên không null giá trị

$a = null 
$b = 3; 
$c = null 

(Tôi không bao giờ biết những gì sẽ null:. Có lẽ tất cả trong số họ, có lẽ không ai trong số họ)

sau đây để gọi lười biếng tải, tôi đã cố gắng để gán giá trị không null đầu tiên theo cách này:

$d = $a or $b or $c; 

(Nó tương tự như cách JavaScript var d = a || b; (nó sẽ chỉ định b nếu không có a).)

Nhưng trong PHP có vẻ như nó không hoạt động.

Tôi có làm sai hay cách tốt nhất và đơn giản nhất để làm điều này là gì?

+1

có thể trùng lặp của [Sử dụng đoản mạch để nhận biến số không null đầu tiên] (http://stackoverflow.com/questions/8203755/using-short-circuiting-to-get-first-non-null-variable) – billyonecan

+3

Người dùng, không chấp nhận sửa đổi _minor_ như [this one] (http://stackoverflow.com/suggested-edits/789112) –

+0

PHP chuyển đổi thành: ($ d = $ a) hoặc $ b hoặc $ c; trả về true – WooDzu

Trả lời

28

Bạn có thể sử dụng toán tử ternary ngắn trong PHP 5.3+:

$d = $a ?: $b ?: $c; 

Lưu ý rằng điều này không ép buộc như trong JS.


Cập nhật (PHP 7)

Trong PHP 7.0 trở lên bạn sẽ làm (gọi tắt là null coalescing-more informations):

$d = $a ?? $b ?? $c; 
+0

Chỉ từ 'PHP 5.3' – hsz

+0

@hsz: Được thêm để làm rõ. – elclanrs

+0

Thats mát mẻ, nhưng những gì bạn có nghĩa là; loại đúc ;? – pie6k

1

Nếu bạn có thể đặt các biến trong một mảng này có thể giúp:

$d = current(array_filter(array($a, $b, $c))); 

hay này có thể là một apporach cũng như:

if(!empty($a)) { 
$d = $a; 

} 

việc kiểm tra này có thể conitnue cho tất cả các biến như $b$c

1

Hãy thử này ...

$d = array_filter(array($a, $b, $c))[0]; //newer PHP only 

hoặc điều này:

$d = current(array_filter(array($a, $b, $c))); //warning about references 

hay này:

$tmp = array_filter(array($a, $b, $c)); 
$d = current($tmp); //most safe 
+0

Đây là giải pháp tốt hơn khi bạn có số lượng giá trị tùy ý hoặc không xác định mà bạn muốn kết hợp lại. –

0

Bạn có thể thử với:

$d = !is_null($a) ? $a : (!is_null($b) ? $b : $c); 
1

trong php bạn có thể làm điều đó như thế này: -

`<?php 
$a = 1; 
$b = null; 
$c = null; 
$d = $a ? $a:($b?$b:($c?$c:'null')); 
echo $d; 
?>` 
1

Trong PHP 7 bạn có thể sử dụng toán tử "Null coalescing":

$d = $a ?? $b ?? $c; 

Điều này sẽ gán giá trị không null đầu tiên (hoặc null nếu không có giá trị), như câu hỏi được hỏi.

Không giống như một số các câu trả lời khác nó sẽ không được vấp lên bởi ngầm loại đúc như vậy, ví dụ,

$b = 0; $c = 1; 
$d = $a ?? $b ?? $c; 
echo $d; 

chí đầu ra 0: Nó sẽ không nhớ rằng $ một chưa được cài đặt ở tất cả và sẽ không vượt qua $ b mặc dù nó loại-phôi đến false.

Các vấn đề liên quan