使用$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]];
答案 0 :(得分:2)
我做了一些工作并意识到,你不需要array_flip
,array_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);
}
无需创建数组副本。