使用密钥IDS构建新阵列

时间:2014-05-28 22:39:24

标签: php arrays

使用$ids中的数字,我想从$nuts中提取数据。

例如:

$ids = [0,3,5]; // 0 calories, 3 sugar, 5 fat

$nuts = [
    'calories' => 'cal',
    'protein' => 'pro',
    'carbohydrate' => 'car',
    'sugar' => 'sug',
    'fiber' => 'fib',
    'fat' => 'fat',
];

$returnData = [
    'calories' => 'cal',
    'sugar' => 'sug',
    'fat' => 'fat',
];

我可以使用$ids遍历每个foreach();号码,但我很想知道是否有比这更好的方法?

$newNuts = array_values(array_flip($nuts));
foreach($ids as $i)
    $returnData[$newNuts[$i]] = $nuts[$newNuts[$i]];

2 个答案:

答案 0 :(得分:2)

我做了一些工作并意识到,你不需要array_fliparray_values没问题。

$num_nuts = array_values ($nuts);

for ($z=0; $z<sizeof($ids); $z++) {
 echo $num_nuts[$ids[$z]];            
 }

只需再增加一行代码,但我认为它可以完成这项工作。我认为我的速度会更快,因为array_flip基本上用数组中的相关值交换所有键,这不是我正在做的事情。实际上减少了痛苦。

我只是通过索引将原始数组转换为新数组,然后简单地循环它。此外,不是使用PHP的强大功能的优雅方式,但工作得很好。 array_flip is O(n),但我认为最好不要将它用于更大的数据集。

答案 1 :(得分:0)

一个简单的array_slice怎么样?

$result = array();
foreach ($ids as $i) {
    $result += array_slice($nuts, $i, 1, true);
}

无需创建数组副本。