Рубрики
Uncategorized

Объяснение влияния отмены установки PHP на json_encode

Автор оригинала: David Wong.

Предисловие

В PHP есть оператор, который освобождает переменные, называемые unset (начиная с PHP 4, unset больше не функция, а оператор). В этой статье в основном представлен соответствующий контент о влиянии PHP unset на json_encode . Давайте перейдем к деталям.

Сначала запустите фрагмент PHP-кода:

$a = Array(0=>'hello world', 1=>'girl', 2=>'boy');

var_dump(json_encode($a));

unset($a[1]);

var_dump(json_encode($a));

Результаты заключаются в следующем:

строка(28) “[“привет, мир”,”девочка”,”мальчик”]” строка(29) “{“0″:”привет, мир”,”2″:”мальчик”}”

Обнаружено, что до и после отмены установки тип переменной меняется. До захода солнца это массив, а после захода солнца-объект.

Почему это так?

Посмотрите, что делают unset и json_encode.

Функция Unset () уничтожает указанную переменную. Вы можете удалить указанные элементы массива, и индекс не будет изменен после удаления.

Функция Json_encode() используется для кодирования переменных в формате JSON, которая возвращает данные JSON при успешном выполнении или ЛОЖЬ, если нет.

Если объектом преобразования json_encode является массив, то вам нужно обратить на это внимание. Посмотрите на следующий пример:

Приведите пример:

$a = Array(0=>'hello world', 1=>'girl', 2=>'boy');
var_dump(json_encode($a));

$b = Array('name'=>'hello world', 'age'=>'18', 'gender'=>'man');
var_dump(json_encode($b));

Операционные результаты:

строка(28) “[“привет, мир”,”девочка”,”мальчик”]” строка(48) “{“имя”:”привет, мир”,”возраст”:”18″,”пол”:”мужчина”}”

Установлено, что один из приведенных выше результатов представляет собой массив, а другой-объект.

Это связано с тем, что $a-массив индексов (непрерывный массив), $b-ассоциативный массив (прерывистый массив).

Давайте возьмем другой официальный пример:

Результаты приведенного выше вывода являются следующими:

Примечание: Второй массив выше преобразуется в объект, поскольку значение ключа не начинается с 0, что также является прерывистым массивом.

Поэтому, когда unset выполняется в непрерывном массиве, он становится прерывистым массивом, а когда json_encode выполняется в прерывистом массиве, он становится объектом.

Вывод:

PHP:

Массив индексов: массив с числами в качестве ключей. И ключевая ценность-это саморазвитие.

Массив ассоциаций: относится к значению ключа, соответствующему значению, и это значение ключа нерегулярно, обычно мы указываем.

После преобразования массива индексов в json он становится массивом. Когда ассоциативный массив преобразуется в json, он является объектом

Разверните один:

Если вы хотите выполнить json_encode в непрерывном массиве и стать объектом, вы можете сделать это:

$arr = array(
 '0'=>'a','1'=>'b','2'=>'c','3'=>'d'
);
echo json_encode((object)$arr);

Выходные результаты выглядят следующим образом:

{“0″:”a”,”1″:”b”,”2″:”c”,”3″:”d”}

Разверните два:

Как устранить влияние unset на json_encode? Результаты преобразования по-прежнему являются массивами

При использовании unset:

foreach ($array as $k => $v) {
 If (a condition){
  unset($array[$k]);
 }
}

После оптимизации:

$tmp = array();
foreach ($array as $k => $v) {
 If (a condition){
  continue;
 }
 $tmp[] = $v;
}
$array = $tmp;

Json_encode в оптимизированном массиве $может быть идеально преобразован в массив вместо объекта

резюме

Выше приведено все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенное справочное значение для учебы или работы каждого. Если у вас есть какие-либо вопросы, вы можете оставить сообщение и обменяться им. Спасибо вам за вашу поддержку в развитии peer.