使用另一个数组作为键创建关联数组

时间:2016-03-01 01:40:58

标签: php arrays array-map

我目前拥有$keys数组

array(5) {
  [0] =>
  string(9) "SessionID"
  [1] =>
  string(5) "Title"
  [2] =>
  string(11) "Description"
  [3] =>
  string(5) "Level"
  [4] =>
  string(4) "Type"
}
,我将其用作另一个名为$values的数组的值的键。

我想通过将另一个数组映射到$keys来创建一个关联数组。

另一种说法是我希望array_combine($keys, $values)$keys只有5个元素但$values有超过3000个元素。

编辑1:抱歉没有放入$values示例。它与$keys

具有相同的顺序
+-----------+-------+-------------+---------+------+
| SESSIONID | TITLE | DESCRIPTION |  LEVEL  | TYPE |
+-----------+-------+-------------+---------+------+
|           |       |             |         |      |
| 1         | A     | Describe A  | Level 1 | Word |
|           |       |             |         |      |
| 2         | B     | Describe B  | Level 2 | Word |
+-----------+-------+-------------+---------+------+

$values = [
1, 'A', 'Describe A', 'Level 1', 'Word',
2, 'B', 'Describe B', 'Level 2', 'Word'
];

因为我从一个CSV文件填充两个数组。

2 个答案:

答案 0 :(得分:3)

由于你遗漏了$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);

答案 1 :(得分:2)

if it's worth doing, it's worth overdoing以来,这是[{3}}

第一部分的一个稍微不必要的复杂版本
<?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);
    }
}

请参阅Michael's answerhttp://docs.php.net/language.generatorshttp://docs.php.net/class.norewinditerator

数组是2015年(darn iterator_to_array):-D