#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"