Teresa
Teresa

Reputation: 127

Sort an array of single-element associative rows by row value

I have an array like:

$a = array(
    array("fghfg12" => 34),
    array("dfgdf23" => 97),
    array("wetw13" => 65),
    array("rtyr567" => 18)
);

I want to sort this array by its value. That means I want the result like:

$a = array(
    array("rtyr567" => 18),
    array("fghfg12" => 34),
    array("wetw13" => 65),
    array("dfgdf23" => 97)
);

For this I am using:

uksort($a, function($key1, $key2) use ($res) {
      return (array_search($key1, $res) > array_search($key2, $res));
});

Another method:

$arr2ordered = array() ;
foreach (array_keys($a) as $key) {
   $arr2ordered[$key] = $a[$key] ;
}

But I didn't get my result;

I already tried with this also:

$price = array();
foreach ($a as $key => $row)
{
    $price[$key] = $row;
}
array_multisort($price, SORT_DESC, $a);
print_r($a);

But still, I didn't get my result.

Upvotes: 1

Views: 61

Answers (2)

Pavlo Mezhevikin
Pavlo Mezhevikin

Reputation: 345

try that code

$a = array(array("fghfg12" => 34),
       array("dfgdf23" => 97),
       array("wetw13" => 65),
       array("rtyr567" => 18));

usort($a, function($a, $b){
return array_values($a) > array_values($b);
});
       

But only for your structure..

Upvotes: 0

Don't Panic
Don't Panic

Reputation: 41820

Since you don't know what the key of each inner array will be, you can map current() over $a to get the first value in each inner array, then use that array of values as the first argument to array_multisort() to sort $a.

array_multisort(array_map('current', $a), $a);

Check it out: https://3v4l.org/4Zu0q

Upvotes: 2

Related Questions