Создать ассоциативный массив, используя другой массив в качестве ключей
В настоящее время у меня есть $keys
массив
массив (5) { [0] => строка (9) "SessionID" [1] => строка (5) "Заголовок" [2] => Строка (11) "Описание" [3] => Строка (5) "Уровень" [4] => Строка (4) "Тип" }что я использую в качестве ключей для значений другого массива под названием
$values
,Я хотел бы создать ассоциативный массив путем сопоставления другого массива с $keys
,
Еще один способ сказать это, я хотел бы array_combine($keys, $values)
в то время как $keys
имеет только 5 элементов, но $values
имеет более 3000 элементов.
Изменить 1: Извините, что не вставил $values
пример. Это будет иметь тот же порядок, что и $keys
:
+ ----------- + ------- + ------------- + --------- + ----- - + | СЕССИОНИД | НАЗВАНИЕ | ОПИСАНИЕ | УРОВЕНЬ | ТИП | +-----------+-------+-------------+---------+------+ | | | | | | | 1 | A | Опишите A | Уровень 1 | Слово | | | | | | | | 2 | Б | Опишите B | Уровень 2 | Слово | + ----------- + ------- + ------------- + --------- + ----- - +
или же
$values = [ 1, "А", "Опишите А", "Уровень 1", "Слово", 2, "B", "Опишите B", "Уровень 2", "Слово" ];
так как я заполняю оба массива из одного файла CSV.
2 ответа
Так как вы пропустили объяснение того, что $values
это я немного угадал. Вот два сценария.
Если все ваши значения находятся на одном уровне, как показано ниже, мы можем разделить их на части:
$keys = [ "SessionID", "Title", "Description", "Level", "Type", ];
$values = [
1,
"Title A",
"Desc A",
"Monster",
"car",
2,
"Title B",
"Desc B",
"Devil",
"car",
];
Разрежьте данные до массивов с длиной, равной количеству ключей.
$chunks = array_chunk($values, count($keys));
Затем сопоставьте их, используя array_combine
как ты и предложил.
$ass = array_map(function ($chunk) use ($keys) {
return array_combine($keys, $chunk);
}, $chunks);
Если ваш массив является массивом массивов (или строк), мы можем пропустить часть фрагмента и напрямую передать ее в функцию отображения:
$values = [
[ 1, "Title A", "Desc A", "Monster", "car" ],
[ 2, "Title B", "Desc B", "Devil", "car" ]
];
$ass = array_map(function ($chunk) use ($keys) {
return array_combine($keys, $chunk);
}, $values);
Так как, если это того стоит, стоит переборщить, вот немного более сложная версия первой части ответа Майкла.
<?php
$keys = array("SessionID","Title","Description","Level","Type");
$it = new NoRewindIterator(gen_data());
do {
$foo = array_combine(
$keys,
iterator_to_array(new LimitIterator($it, 0, 5))
);
var_export($foo); echo "\r\n";
}
while ( $it->valid() );
function gen_data() {
static $HOW_MANY_WOULD_YOU_LIKE = 100;
$x = array("Session #","Title #","Desc #","Lvl #","Type #");
for($i=0; $i<$HOW_MANY_WOULD_YOU_LIKE*5; $i++) {
yield $x[$i%5].((int)($i/5)+1);
}
}
см. http://docs.php.net/language.generators, http://docs.php.net/class.norewinditerator и http://docs.php.net/class.limititerator
Массивы так 2015 (darn iterator_to_array):-D