基于值对数组进行排序,并将前n个元素作为排序数组的另一个数组

时间:2013-10-11 09:01:32

标签: php arrays sorting

我有一个包含60个元素的数组,需要对它进行排序(从低到高),并且必须将该排序数组的前10个元素作为另一个数组。我被卡住了。任何帮助都会很棒!

到目前为止,我有 -

$lists_store = get_stores($user_location);
    asort($lists_store); // this give me sorted array as expected 

 echo "<pre>";
print_r($lists_store);
exit;

将输出..

Array
(
    [39] => 6291
    [52] => 6293
    [63] => 6322
    [64] => 6323
    [46] => 6327
    [37] => 6338
    [26] => 6341
    [44] => 6346
    [20] => 6346
    [17] => 6346
    [11] => 6349
    [43] => 6349
    [24] => 6350
    [21] => 6351
    [12] => 6351
    [10] => 6352
    [27] => 6354
    [22] => 6354
    [19] => 6355 .....

现在问题来了......

    $lists_store = array_slice($lists_store, 0, 10); // gives me first 10 elements of array but on the key basis 

 echo "<pre>";
print_r($lists_store);
exit;

将输出..

Array
(
    [0] => 6291
    [1] => 6293
    [2] => 6322
    [3] => 6323
    [4] => 6327
    [5] => 6338
    [6] => 6341
    [7] => 6346
    [8] => 6346
    [9] => 6346
)

期望的输出 -

Array
(
    [39] => 6291
    [52] => 6293
    [63] => 6322
    [64] => 6323
    [46] => 6327
    [37] => 6338
    [26] => 6341
    [44] => 6346
    [20] => 6346
    [17] => 6346
)

4 个答案:

答案 0 :(得分:2)

如果你想获得数组的一部分,我认为你应该使用array_slice

  

请注意,array_slice()将重新排序并重置数值数组   默认情况下的索引您可以通过设置更改此行为   preserve_keys为TRUE。

尝试使用

$lists_store = array_slice($lists_store, 0, 10, true);

参考:http://www.php.net/manual/en/function.array-slice.php

答案 1 :(得分:2)

而不是array_chunk(),使用array_slice()和第三个参数“preserve_keys”。

请参阅此处的小提琴:http://phpfiddle.org/lite/code/0dr-jht

答案 2 :(得分:2)

array_chunk()上的文档表明有第三个可选的布尔参数来保存密钥,所以如果你这样做:

$lists_store = array_chunk($lists_store, 10, true);

它可能会按预期工作

但是您应该使用array_slice(),因为array_chunk()将数组划分为片段,array_slice()只需要指定的部分,这更符合您的要求

$lists_store = array_slice($lists_store, 0, 10, true); // the last parameter is used to preserve the keys

答案 3 :(得分:1)

使用array_slice(array $ array,int $ offset [,int $ length = NULL [,bool $ preserve_keys = false]])

如果设置为“true”,则最后一个参数将保留您的密钥。