Home > front end >  Sort string array in PHP by a number parsed parsed from each string
Sort string array in PHP by a number parsed parsed from each string

Time:10-14

I have a program where I receive a string at the input and store it line by line in the field, for example list [0] = 'Roll 5CZK', etc .. I also have a function that finds the value from the string (number, here 5). How can I sort this field. I don't want to solve it with a 2D array

$string='Rohlík 5Kč
CZK400 Knížka
Pivo 42,-
Houska 4 Kč';
$list = explode(PHP_EOL, $string);

getPrice($list[1]); // => 400
getPrice($list[2]; // => 42

CodePudding user response:

Solution with usort as in the comment, only $a and $b swapped to achieve a descending sort.

$arr = array (
  0 => "Rohlík 5Kč",
  1 => "CZK400 Knížka",
  2 => "Pivo 42,-",
  3 => "Houska 4 Kč",
);

/*
 * This is a greatly simplified implementation of getPrice()
 * to make the code reproducible
 */
function getPrice($str){
  return preg_replace('~[^\d]~u','',$str);
}

//Sorting
usort($arr,function($a,$b){
  return getPrice($b) <=> getPrice($a);
});

// Test Output
var_export($arr);

Output:

array (
  0 => 'CZK400 Knížka',
  1 => 'Pivo 42,-',
  2 => 'Rohlík 5Kč',
  3 => 'Houska 4 Kč',
) 

CodePudding user response:

foreach ($list as $v) $arr1[$v]=getPrice($v); rsort($arr1);

... and you are done!

  • Related