2012-06-22 31 views
10

Nếu tôi có một mảng:nhận được giá trị không null đầu tiên từ mảng php

Array 
(
    [0] => 
    [1] => a 
    [2] => b 
    [3] => c 
) 

Và tôi muốn có được giá trị không null đầu tiên từ mảng, trong trường hợp này "a". Làm thế nào tôi có thể đi về làm điều đó tốt đẹp và dễ dàng?

+0

bởi thoải mái và dễ dàng, tôi có nghĩa là một cách tiếp cận ngắn. –

Trả lời

32

Không chắc về thoải mái và dễ dàng. Tuy nhiên, một cách tiếp cận ngắn có thể là:

$first = current(array_filter($sparse_array)); 

đâu array_filter sẽ trích cho bạn những "truthy" giá trị, do đó bỏ qua mục rỗng và sai. Trong khi current chỉ đơn giản là cung cấp cho bạn đầu tiên của những mục còn lại.

+2

Thật không may, "trung thực" cũng lọc ra các chuỗi rỗng, boolean falses và số 0 ... nếu không thì giải pháp tốt nhất nếu OP muốn logic đó –

+1

Thậm chí có thể thêm một gọi lại tùy chỉnh vào 'array_filter()' để chỉ lọc một cách rõ ràng 'null' giá trị. Cũng chỉ là một lưu ý, 'current()' mong đợi tham số của nó được truyền qua tham chiếu, vì vậy hiện tại điều này sẽ đưa ra một cảnh báo/cảnh báo "nghiêm ngặt tiêu chuẩn". – nickb

+0

Để thay thế cho các giải thích khác nhau về tính trung thực, một hàm quyết định có thể được áp dụng: '... (array_filter ($ arr," strlen "))' – mario

2

Vâng, bạn có thể thử này:

foreach($array as $x) { 
    if($x) break; 
} 
if($x) { 
    // $x is the first non-null value 
} 
else { 
    // There were no non-null values 
} 
3
function getFirstNotNull($array) { 
    foreach($array as $val) { 
     if(!is_null($val) || !$val) return $val; 
    } 
} 
+0

Trong dòng thứ hai nó sẽ là '$ array' chứ không phải' $ arrea'. –

4
function get_first_not_null($array){ 
    foreach($array as $v){ 
    if($v !== null){ 
     return $v; 
    } 
    } 
    return null; 
} 
3
$res = null; 
foreach ($arr as $v) { 
    if ($v !== null) { 
     $res = $v; 
     break; 
    } 
} 
+0

Mã khác giải pháp của mario, nhưng nó chắc chắn chạy nhanh hơn - và nó sẽ bắt các giá trị "falsey" không null. – Blazemonger

1

Tôi sẽ sử dụng array_reduce

$firstNonNull = array_reduce($array, function($v, $w) { 
    return $v ? $v : (isset($w) ? $w : FALSE); 
}); 
Các vấn đề liên quan