-1

我有一个包含 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

4 回答 4

2

而不是array_chunk()array_slice()与第三个参数“ preserve_keys”一起使用。

在这里查看小提琴:http: //phpfiddle.org/lite/code/0dr-jht

于 2013-10-11T09:09:58.020 回答
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
于 2013-10-11T09:10:50.033 回答
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

于 2013-10-11T09:07:53.470 回答
1

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

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

于 2013-10-11T09:13:35.440 回答