2011-01-28 91 views
8

我想轉換這個數組,數組[4]不應該給它null它可以給空白空間(空字符串)。如何將空值轉換爲PHP數組中的空字符串?

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

(的原因變化,無關的一般問題)

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

回答

11

那麼你應該只遍歷數組元素,檢查每個值空和空字符串替換。類似的東西:

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

此外,您可以實現檢查功能並使用array_map()函數。

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

`0 == NULL`是TRUE;也。應該使用身份(`===`)。 – 2011-01-28 11:54:41

17

PHP 5.3+

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

這將陣列到一個新的數組,其利用空三元運算要麼包括所述陣列的原始值,或空字符串如果該值爲空映射。

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

使用此功能。這將替換空到空字符串嵌套數組也

$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; 
    } 

輸出將是:

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

嘗試網上瀏覽:https://3v4l.org/7uXTL

1

你可以使用這個來代替。

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

這裏有一個網上招我還沒有在上面的答案看見提及:

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

這是$_GET參數加載超靈便讓事情變得簡短易讀。獎金,如果你只接受整數,你可以用trim()intval()代替strval()

如果缺失或非數字值,intval的缺省值將爲0strval的缺省值爲"",如果爲空,則爲空或爲false。

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

See DEMO

現在對於數組,你仍然需要循環的每一個值,並將其設置。但它是非常具有可讀性,IMO:

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

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

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

下面是結果:

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

有趣的是,true變爲 「1」,但'true'保持一個字符串和false成爲空字符串""

現在使用$arr[$key] = intval($value);相同的數據產生這個結果:

['1','4','0','0','0','0','1','0','0'] 
相關問題