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

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

7 ответов


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

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);

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

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

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

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

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

по умолчанию intval будет 0 если отсутствует или не числовое значение. Значение по умолчанию для strval is "" если пусто, null или ложный.

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

посмотреть демо

теперь для массива вам все равно нужно будет перебирать каждое значение и устанавливать его. Но это очень читаемо, 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']

использовать эту функцию. Это заменит 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