【问题标题】:Sort string array in PHP by a number parsed parsed from each string通过从每个字符串解析的数字对 PHP 中的字符串数组进行排序
【发布时间】:2021-12-01 21:47:45
【问题描述】:

我有一个程序,我在输入中接收一个字符串并将其逐行存储在字段中,例如 list [0] = 'Roll 5CZK' 等。我还有一个函数可以从字符串(数字,这里是 5)。我怎样才能对这个字段进行排序。我不想用二维数组解决它

$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

【问题讨论】:

  • 有一个list of sort functions。选择你需要的那个。在不知道getPrice() 在做什么的情况下,我无法判断哪一个最适合。创建一个辅助数组来对其进行排序并没有错。
  • 当然,我可以创建一个辅助字段,然后进行比较,但我想知道它是否更容易。该函数(我写的)从字符串中返回数值,我试图在代码中指出它。
  • 类似usort($list, fn ($a, $b) => getPrice($a) <=> getPrice($b));?尽管请注意,getPrice 可能会为同一个元素重复调用。如果这是一个问题,您应该映射到一些中间数据结构,然后排序并映射回来。
  • 但我无法理解这个问题。你到底想排序什么?您能否完善您的问题并添加预期结果?
  • 这能回答你的问题吗? How can I sort arrays and data in PHP?

标签: php arrays sorting


【解决方案1】:

解决方案如评论中的 usort,只有 $a 和 $b 交换以实现降序。

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

输出:

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

【讨论】:

    【解决方案2】:

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

    ...你就完成了!

    【讨论】:

    • A code-only answer is not high quality。虽然此代码可能很有用,但您可以通过说明其工作原理、工作方式、何时应该使用以及它的局限性来改进它。请edit您的回答包括解释和相关文档的链接。
    • @Ostermiller:当然,老伙计。为什么它有效?我不知道。也许这是一个 1 和 0 的问题。它是如何工作的?见上文。
    • 不要在 cmets 中添加详细信息,请edit 您的答案以添加请求的信息。然后你可以评论说你已经这样做了。此处的评论可能会被“显示更多 cmets”隐藏或删除,恕不另行通知。将更新编辑到您的答案中可确保它们不会丢失,并且每个想要使用您的答案的人都能看到它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2016-05-25
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    相关资源
    最近更新 更多