【问题标题】:Unable to get sort Array to work [duplicate]无法让排序数组工作[重复]
【发布时间】:2013-01-25 16:19:32
【问题描述】:

可能重复:
php sort($array) not working - returning 1 instead of sorted array

我很难让数组 sort() 函数按预期工作,我也尝试过 ksort() 等。 :::

这很好用

foreach( (array) $query as $post ) {
   $VP = ( ( empty($PMD['vehicle_price'][0]) ) ?  $VP = 'On Request' : $VP = $PMD['vehicle_price'][0] ); 
      $vehicle_p[] = $VP;
}

$return = array_count_values($vehicle_p); //Key Value Unique ( count )

foreach($return as $value => $count) {
   <li><span class="key">' . $value . '</span> (' . $count . ')</li>
}

最终结果: 480000 (1), 80000 (2), 120400 (1)

我现在想对此进行排序,因此 80000 (2) 在列表中排在第一位,然后是 120400 (1),然后是 480000 (1)

只要我像下面添加任何 sort() 函数,我只会得到一个输出 1

我无法让它工作,任何帮助将不胜感激

$return = array_count_values($vehicle_p); //Key Value Unique ( count )
$return = sort($return);
print_r($return);

【问题讨论】:

  • 快速向发现此内容的人解释(因为它在 Google 上返回 #1):这是因为您有 $return = sort( $return )。 sort 在完成时返回 true 或 false。因此,在此代码中,您将覆盖 $return 您可能期望 $return 成为排序数组的位置。将$return = sort($return) 替换为:sort($return)

标签: php arrays sorting


【解决方案1】:

如果我理解正确,您想通过升序对数组进行排序吗?如果这是正确的查看asort(),它将按值对数组进行排序,但保持索引/键不变

http://php.net/manual/en/function.asort.php

请记住,排序函数返回布尔值,因此不要将它们分配给变量,只需调用数组上的函数即可。

asort($array);

【讨论】:

  • asort 给我的结果与我上面的评论相同
  • 你是在做$return = asort($return);还是只是asort($return);
  • 感谢您的反馈 100% 成功
【解决方案2】:

sort 函数返回一个布尔值。

因此,在通过将此布尔值分配给$return 对其进行排序后,您实际上是在覆盖$return 的内容。

简单地做

sort($return);

【讨论】:

  • $return = array_count_values($vehicle_p); //键值唯一(count) $return = sort($return); print_r($return);这将打印“1”和我的 foreach == 警告:为 Foreach() 提供的参数无效
  • $return = sort($return); sort() 函数返回一个布尔值(1 是一个布尔值)。不要将排序结果分配给$return。只需sort($return);
  • 感谢您的反馈,它也有效