【问题标题】:php array sort in foreachforeach中的php数组排序
【发布时间】:2014-04-08 15:43:38
【问题描述】:

我正在尝试订购由 foreach 循环生成的数组,这是我的代码:

$lowestvar = array();

foreach ($variations as $variation){
    $lowestvar[] = $variation['price_html'];            
}

然后我像这样使用 array_multisort:

array_multisort($lowestvar, SORT_ASC);
print_r($lowestvar);

这适用于具有以下输出的第一个循环项:

Array ( [0] => £10.00 [1] => £15.00 ) 

但循环中的第二个数组看起来像这样:

Array ( [0] => £10.00 [1] => £5.00 ) 

关于我哪里出错了有什么想法吗?

【问题讨论】:

  • edit您的问题包含以下语句的输出:echo '<pre>'.print_r($variations, 1).'</pre>';
  • 这会产生大量代码,而且大部分代码毫无意义。

标签: php arrays array-multisort


【解决方案1】:

您正在排序 STRINGS,这意味着 10 < 5 为真。请记住,字符串排序是按字符排序,而不是按“整个值”。

【讨论】:

  • 不要再发生这种情况了。堆栈前的咖啡。总是。
  • 那么这附近还有吗?
  • usort(),带有一个回调函数,可以将字符串转换为数字以进行比较。但是,如果您从某个地方获得这些货币价值,它们只是数字,那么您应该存储这些纯数字。格式化的字符串应该只在输出时生成,而不是像他这样的中间阶段。
【解决方案2】:

您可以使用usort(),如下例所示

 function cmp($a1, $b1)
 {
  $a=str_replace('£','',$a1);
  $b=str_replace('£','',$b1);
  if ($a == $b) {
      return 0;
    }
   return ($a < $b) ? -1 : 1;
 }

  $a = array('£10.00','£5.00');

  usort($a, "cmp");
  print_r($a);

输出

Array
(
  [0] => £5.00
  [1] => £10.00
 )

【讨论】:

  • 不需要int typecasting...我讨厌php))
  • 一些解释:如果有时将它们作为数字进行比较,我如何保证我的字符串正确排序?
猜你喜欢
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 2021-07-03
  • 2018-06-05
  • 1970-01-01
相关资源
最近更新 更多