Mpampinos Holmens
Mpampinos Holmens

Reputation: 1937

PHP sort array using another array no keys

Hello i have an array in php

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

and i want to sort it using that array

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

so i want the element with the greatest value on the second array to come first on the first array not its value from the second array but the element it self from the first array to move in the first position on the first array! The second bigger to the second place etc.. elements with the same value don't care me how they will be arranged!

the output i want to get is

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

Upvotes: 0

Views: 249

Answers (4)

Patrick
Patrick

Reputation: 3172

I think what the OP wants is to sort the first array by the second array's values.

IE- the second array is the vote count for the first array's web pages.

This could be solved more simply if in the first array you have each element as an array with two elements in it, webpage & vote count

$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...
)

But since the question asked how to do it in the current data structure:

$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]);

Upvotes: 0

David Gillen
David Gillen

Reputation: 1172

Lets call your arrays are $dataArray, and $sortArray respectively

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

If you need it reversed, just add in a call to array_reverse() at the end.

Upvotes: 0

MUY Belgium
MUY Belgium

Reputation: 2452

Use array_multisort.

see http://www.php.net/manual/fr/function.array-multisort.php, follow the "Exemple #1 Trier plusieurs tableaux"

Cordially

Upvotes: 1

zessx
zessx

Reputation: 68790

You can use array_multisort() :

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

Documentation here

Upvotes: 2

Related Questions