В настоящее время у меня есть $keys
массив
массив (5) { [0] => string (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.
Так как вы пропустили объяснение того, что $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) 😀