Как преобразовать нулевые значения в пустую строку в php-массиве?

Я хочу преобразовать этот массив, который Array [4] не должен давать null, он может дать пустое пространство (пустая строка).

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 

Затем вам нужно просто пропустить элементы массива, проверить каждое значение для null и заменить его пустой строкой. Что-то вроде того:

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

Кроме того, вы можете реализовать функцию проверки и использовать функцию array_map () .

PHP 5.3+

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

Это отобразит массив в новый массив, который использует нулевой тернарный оператор, чтобы либо включить исходное значение массива, либо пустую строку, если это значение равно нулю.

 $array = array_map(function($v){ return $v ?: ''; },$array); 
 foreach($array as $key=>$value) { if($value===NULL) { $array[$key]=""; } } 

Вы можете использовать это вместо этого.

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

Используйте эту функцию. Это заменит значение null на пустую строку в вложенном массиве

 $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

Вот онлайн-трюк, который я не видел в приведенных выше ответах:

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

Это очень удобно для загрузки параметров $_GET чтобы держать вещи короткими и читаемыми. Бонус, вы можете заменить strval() на trim() … или с помощью intval() если вы принимаете только целые числа.

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

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

См. DEMO

Теперь для массива вам все равно нужно перебрать все значения и установить его. Но это очень читаемо, ИМО:

 $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']