2011-01-28 70 views
8

Tôi muốn chuyển đổi mảng này mà Array [4] không nên cung cấp null nó có thể cho không gian trống (chuỗi rỗng).Làm thế nào để chuyển đổi các giá trị null thành chuỗi rỗng trong mảng php?

Array (
    [0] => 1 
    [1] => 4 
    [2] => 0 
    [3] => V 
    [4] => 
    [5] => N 
); 

(Lý do cho sự thay đổi, không liên quan đến câu hỏi chung)

Fatal error: Uncaught exception 
'PDOException' with message 'Database 
error [23000]: Column 'message' cannot 
be null, driver error code is 1048' in 

Trả lời

11

Sau đó, bạn nên chỉ lặp qua các phần tử mảng, kiểm tra mỗi giá trị null và thay thế bằng chuỗi rỗng . Một cái gì đó như thế:

foreach ($array as $key => $value) { 
    if (is_null($value)) { 
     $array[$key] = ""; 
    } 
} 

Ngoài ra, bạn có thể thực hiện chức năng kiểm tra và sử dụng chức năng array_map().

1
foreach($array as $key=>$value) 
{ 
if($value===NULL) 
{ 
$array[$key]=""; 
} 
} 
+0

'0 == NULL' là' TRUE' cũng có. Nên đã sử dụng danh tính ('==='). –

17

PHP 5.3+

$array = array_map(function($v){ 
     return (is_null($v)) ? "" : $v; 
    },$array); 
3

này sẽ lập bản đồ các mảng đến một mảng mới mà sử dụng các nhà điều hành ternary null để một trong hai bao gồm một giá trị ban đầu của mảng, hoặc một chuỗi rỗng nếu giá trị là null.

$array = array_map(function($v){ 
    return $v ?: ''; 
},$array); 
0

Sử dụng chức năng này. Điều này sẽ thay thế null để chuỗi rỗng trong mảng lồng nhau cũng

$arr = array(
      "key1"=>"value1", 
      "key2"=>null, 
      "key3"=>array(
       "subkey1"=>null, 
       "subkey2"=>"subvalue2"), 
      "key4"=>null); 

    echo json_encode(replace_null_with_empty_string($arr)); 

    function replace_null_with_empty_string($array) 
    { 
     foreach ($array as $key => $value) 
     { 
      if(is_array($value)) 
       $array[$key] = replace_null_with_empty_string($value); 
      else 
      { 
       if (is_null($value)) 
        $array[$key] = ""; 
      } 
     } 
     return $array; 
    } 

Output sẽ là:

{ 
    "key1": "value1", 
    "key2": "", 
    "key3": { 
    "subkey1": "", 
    "subkey2": "subvalue2" 
    }, 
    "key4": "" 
} 

Hãy thử trực tuyến tại đây: https://3v4l.org/7uXTL

1

Bạn có thể sử dụng để thay thế.

array_map(function($val){return is_null($val)? "" : $val;},$result); 
1

Dưới đây là một thủ thuật trực tuyến tôi đã không thấy đề cập trong các câu trả lời ở trên:

$val = strval(@$arr["notfound"]); // will not generate errors and 
            // defaults to an empty string 

Đây là siêu tiện dụng cho $_GET tham số tải để giữ cho mọi thứ ngắn và dễ đọc. Tiền thưởng, bạn có thể thay thế strval() bằng trim() ... hoặc với intval() nếu bạn chỉ chấp nhận số nguyên.

Giá trị mặc định cho intval sẽ là 0 nếu thiếu hoặc giá trị không phải là số. Giá trị mặc định cho strval"" nếu trống, không có giá trị hoặc sai.

$val_str = strval(@$_GET['q']); 
$val_int = intval(@$_GET['offset']); 

See DEMO

Bây giờ cho một mảng, bạn sẽ vẫn cần phải lặp qua tất cả các giá trị và thiết lập nó.Nhưng nó rất có thể đọc được, IMO:

$arr = Array (1, 4, "0", "V", null, false, true, 'true', "N"); 

foreach ($arr as $key=>$value) { 
    $arr[$key] = strval($value); 
} 

echo ("['".implode("','", $arr)."']"); 

Dưới đây là kết quả:

['1','4','0','V','','','1','true','N'] 

Thú vị là true trở thành "1", nhưng 'true' vẫn một chuỗi và rằng false trở thành và có sản phẩm nào chuỗi "".

Bây giờ cùng một dữ liệu sử dụng $arr[$key] = intval($value); sản xuất kết quả này:

['1','4','0','0','0','0','1','0','0'] 
Các vấn đề liên quan