Массив: на чем основано значение «s:» в синтаксисе?

#php #mysql #arrays #serialization

#php #mysql #массивы #сериализация

Вопрос:

Мне нужно выполнить импорт массива флажков, но есть значение, которое я не знаю, как оно определяется.

Массив основан на пользовательской мета-опции, которую я создал, которая показывает список параметров флажка категории. Он захватывает все категории и создает флажок, который можно сохранить в профиле пользователя. Категории имеют разные уровни (родительский, дочерний или дочерний дочерний).

Это часть кода, который я использовал для создания параметра user meta:

 $args = array( 'hide_empty' => 0, 'taxonomy'=> 'category');
$categories =  get_categories($args);

if ($categories){
                        foreach ( $categories as $category ){ 
                            if(in_array($category->term_id,(array)$data)) {
                                $selected = 'checked="checked""';
                            } else {
                                $selected = '';
                            }
                            echo '<input name="user_cats[]" value="'.$category->term_id.'" '.$selected.' type="checkbox"/> '.$category->name.'<br/>';
                        }
                    }
  

После выполнения тестового сохранения некоторых параметров флажка я проверил значение базы данных поля «user_cats», оно дает мне что-то вроде этого:

a:2:{i: 0; s: 2: «20»;i: 1;s: 3: «343»;}

Теперь я знаю, что означают все переменные, кроме одной.

a = Общее количество (количество) значений / выборок

i = порядковый номер значения / выбора (* Начиная с 0)

«X» = числовое значение в круглых скобках — это значение

Мой вопрос в том, на чем основано значение s:? Причина, по которой я спрашиваю, заключается в том, что я собираю csv-файл из 1300 записей для импорта, и я не знаю, как определяются значения s:. Я попытался просто дать s: постоянное значение 2, но после импорта значений параметры не были выбраны на основе импортированных массивов. Это не сработало.

Итак, у меня такое ощущение, что выбор правильных параметров основан на значении s:. Альтернативой было бы, если бы я мог импортировать массив без этого текущего синтаксиса.

Я потратил много времени на ручную компиляцию файла с функциями и приемами Excel, и это единственное препятствие на пути. Любая помощь в этом была бы большим спасением.

Ответ №1:

Это формат сериализации php:

 a:2 - array with 2 elements
s:2 - string 2 characters long
i:0 - integer with value "0"
  

Комментарии:

1. Я вижу! Теперь это делает много с тех пор. Я не был уверен, для чего это нужно. Огромное спасибо! Ты спас меня, как день головной боли, лол

2. По большей части это «тип: размер: значение», хотя числа не имеют размеров, просто введите: значение

3. Это полезно знать. Я изучаю php, и мне никогда не приходилось так много иметь дело с массивами. Еще один самородок знаний в банке. Еще раз спасибо!

Ответ №2:

s обозначает строку.

s:2:"20" это строка длиной 2 со значением 20 .

Этот формат является результатом сериализации PHP.

Ответ №3:

a:2:{i:0;s:2:"20";i:1;s:3:"343";} является сериализованной строкой.

Вы можете вызвать unserialize, чтобы отменить это.

 var_dump(unserialize('a:2:{i:0;s:2:"20";i:1;s:3:"343";}');

#result
array
  0 => string '20' (length=2)
  1 => string '343' (length=3)
  

Поэтому вы можете разбить его на следующие:

 a:2        - array of length 2.
i:0        - index 0
s:2:20     - string of length 2 value "20"
i:1        - index 1
s:3:343    - string of length 3 value "343"