Создать ассоциативный массив, используя другой массив в качестве ключей

В настоящее время у меня есть $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.

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);
2

Другие решения

поскольку если это стоит сделать, это стоит переусердствовать, вот немного более излишне сложная версия первой части Майкл ответ

<?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) 😀

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector