Имеется такой массив:
[
"icon: fas fa-toolbox",
"read-friendly: Mix Fixes"
]
Я хочу преобразовать его в это:
{
"icon": "fas fa-toolbox",
"read-friendly": "Mix Fixes"
}
Как лучше всего это сделать?
Пробовал сделать, получил ключи, но их значения неверны:
$settings = collect(\array_slice($lines, 0, $blank))->map(static function ($value) {
$value = explode(':', $value);
return ['key' => trim($value[0]), 'value' => trim($value[1])];
});
$settings = $settings->keyBy('key');
Ответ 1
Вы перемудрили. Вы можете упростить эту задачу, просто итерируя каждую строку и помещая ее в новый массив.
$lines = [
"icon: fas fa-toolbox",
"read-friendly: Mix Fixes"
];
$settings = [];
foreach($lines as $value) {
$value = explode(':', $value);
$settings[trim($value[0])] = trim($value[1]);
}
Ответ 2
Выкладываю свой вариант, так как он устраняет необходимость в отдельном массиве
$myArray = [
"icon: fas fa-toolbox",
"read-friendly: Mix Fixes"
];
// Итерация по массиву, где $i - индекс, а $slice – значение
foreach($myArray as $i => $slice){
// Разбить строку разделителем ':'
$exploded = explode(':', $slice);
// Установите ключ в качестве первой части разобранной строки,
// а значение - в качестве второй, и удалить лишние пробелы
$myArray[$exploded[0]] = trim($exploded[1]);
//Удалить исходный фрагмент из массива
unset($myArray[$i]);
}
var_export($myArray);
Результат:
array (
'icon' => 'fas fa-toolbox',
'read-friendly' => 'Mix Fixes',
)

Web