0

你好我在php中有一个数组

Array
(
    [0] => red
    [1] => blue
    [2] => green
    [3] => yellow
    [4] => purple
    [5] => white
)

我想使用该数组对其进行排序

Array
(
    [0] => 
    [1] => 0
    [2] => -1
    [3] => -5
    [4] => -5
    [5] => 9
)

所以我希望第二个数组中具有最大值的元素首先出现在第一个数组中,而不是它来自第二个数组的值,而是它自己来自第一个数组的元素在第一个数组的第一个位置移动!第二个比第二个大等..具有相同值的元素不在乎我如何排列它们!

我想得到的输出是

Array
    (
        [0] => white
        [1] => blue
        [2] => green
        [3] => yellow
        [4] => purple
        [5] => red
    )
4

4 回答 4

2

您可以使用array_multisort()

$ar1 = array(/* your SO links */);
$ar2 = array(/* your numbers */);
array_multisort($ar2, SORT_DESC, $ar1);

文档在这里

于 2012-08-02T14:49:50.843 回答
1

使用 array_multisort。

请参阅http://www.php.net/manual/fr/function.array-multisort.php,按照“示例 #1 Trier plusieurs tableaux”

亲切地

于 2012-08-02T14:51:20.437 回答
0

让我们分别称您的数组为 $dataArray 和 $sortArray

asort($sortArray);
foreach ( $sortArray as $key=>$val ) {
    $newArray[] = $dataArray[$key];
}

如果您需要反转它,只需在最后添加对 array_reverse() 的调用。

于 2012-08-02T14:53:39.187 回答
0

我认为 OP 想要的是按第二个数组的值对第一个数组进行排序。

IE-第二个数组是第一个数组网页的投票数。

如果在第一个数组中将每个元素作为一个数组,其中包含两个元素,网页和投票计数,这可以更简单地解决

$pages  = Array
(
    array(
        'page'  => 'http://stackoverflow.com/questions/640805/open-source-ios-components-reusable-views-controllers-buttons-table-cells-e',
        'count' => 0
        )
    array(
        'page'  => 'http://stackoverflow.com/questions/3889634/fast-and-lean-pdf-viewer-for-iphone-ipad-ios-tips-and-hints',
        'count' => -1
    )
    // etc for the rest...
)

但是由于问题询问如何在当前数据结构中做到这一点:

$sorted_values  = asort($pages);

$new_pages  = array();

$sorted_keys    = array_keys($sorted_values);

foreach($sorted_keys as $page_key)
    array_push($new_pages, $pages[$page_key]);
于 2012-08-02T14:54:42.200 回答