Я хочу преобразовать этот массив, который 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']