2011-01-28 3 views
8

Я хочу преобразовать этот массив, который Array [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, также. Должна использовать идентификатор ('==='). –

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 параметра, чтобы держать вещи коротким и читаемым. Бонус, вы можете заменить strval() на trim() ... или с intval(), если вы принимаете только целые числа.

По умолчанию для intval будет 0 при отсутствии или нечисловом значении. Значение по умолчанию для strval равно "", если пусто, ноль или ложь.

$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'] 
Смежные вопросы