php中关联数组的前两个元素

时间:2010-12-14 22:49:17

标签: php associative-array

我已经完成了最终目标,但也许有一种更优雅的方式来实现这一目标。

如果我有这样的数组:

$data = array(
    'wood' => 2,
    'metal' => 5,
    'plastic' => 3, 
);

我想从$ data获得前2个键/值对(即金属:5& plastic:3)。这就是我想出的:

arsort($data);       //put values in order
reset($data);           //set pointer to first element
$first = each($data);    //assign first element to $first
array_shift($data); //remove first element from array
reset($data);           //set pointer to the new first element
$second = each($data); //assign the new first element to $second

5 个答案:

答案 0 :(得分:8)

为了获得关键和价值,我会这样:

arsort($data);
$result = array_slice($data,0,2);

答案 1 :(得分:2)

asort($data);
$first = array_pop($data);
$second = array_pop($data);

请注意,我没有将它按相反的顺序排列并抓住第一个项目,而是按顺序排列并抓住最后的项目。

答案 2 :(得分:1)

你的代码是正确的,你只需要一些额外的电话

arsort($data);
$first = each($data);
$second = each($data);

应该足够了。

你需要更具体地了解你想要得到什么。 each返回四个元素的数组 - 这是你想要的吗?

答案 3 :(得分:0)

这样的事情:

$array = array (
    'wood'  => 2,
    'metal' => 1,
    'blah'  => 4
);

$first  = end($array);
$second = prev($array);

答案 4 :(得分:0)

可能不完全是Priority Queue的用途,而regular array sortingextracting functions也完全正常,但要添加新内容:

$queue = new SplPriorityQueue;
$queue->setExtractFlags(SplPriorityQueue::EXTR_BOTH);
$queue->insert('wood', 2);
$queue->insert('metal', 5);
$queue->insert('plastic', 3);

这会自动按数值的降序排序。要获取元素,请执行

var_dump(
    $queue->extract(),
    $queue->extract()
);

会给(codepad

array(2) {  ["data"]=>  string(5) "metal",    ["priority"]=>  int(5) }
array(2) {  ["data"]=>  string(7) "plastic",  ["priority"]=>  int(3) }

然后离开$queue只包含'wood'。

SplPriorityQueue外,您还可以使用SplMaxHeap

阅读更多内容: