2011-11-14 194 views
0

我有问题尝试排序数组 - 我想要所有的IsOpen = 1出现在顶部?使用usort对数组进行排序?

例子:

Array 
(
    [0] => Array 
     (
      [Isopen] => 0 
     ) 

    [2] => Array 
     (
      [Isopen] => 1 
     ) 

    [3] => Array 
     (
      [Isopen] => 0 
     ) 

    [4] => Array 
     (
      [Isopen] => 1 
     ) 

代码:

function cmp($a, $b) { 
     if ($a['Isopen'] >= $b['Isopen']) { 
      return 0; 
     } 
    } 

    usort($data['rowResult'], "cmp"); 

我不明白什么呢$ a和$ b的意思,我看了一下PHP文档 - 信息不明确。

回答

3

$ a和$ b是元素进行比较:

function cmp($a, $b) { 
    if ($a['Isopen'] == $b['Isopen']) { 
     return 0; 
    } 
    return ($a['Isopen'] > $b['Isopen']) ? -1 : 1; 
} 
+0

看来所有的$ b ['Isopen'] = 1在底部。应该以其他方式围绕 –

+0

确定要复制该功能吗?检查** <**在最后一个回报,如果你把**> ** – SERPRO

+0

从'<' to '>'更改'修复问题 –

0

分拣aglorithm是Bubble Sort

本质上,它一次比较阵列实体以确定它们的排序。看到一步步例如,参见http://en.wikipedia.org/wiki/Bubble_sort#Step-by-step_example

+0

为什么重新发明轮子时他可以使用库函数?为什么缓慢的泡沫排序的所有算法? – Erbureth

+0

@Erbureth谁说重新发明轮子?我只是提供了关于排序如何执行的文档,即算法。 –

1

在CMP功能可按应返回0,-1(或小于零)或1(或大于零)。

  • 如果两个值相等则为零。
  • 如果值的形式更高,则大于零。
  • 如果b的值较高,则小于零。

两个值,你可以使用PHP函数strcmp的比较

function cmp($a, $b) { 
    return strcmp($a['Isopen'], $b['Isopen']); 
} 
1
function cmp($a, $b) { 
     if ($a['Isopen'] == $b['Isopen']) { 
      return 0; 
     } 
     return ($a['Isopen'] > $b['Isopen']) ? -1 : 1; 
    } 

这将使得ISOPEN = 1的阵列结束时,如果你想让它在乞求使这

function cmp($a, $b) { 
      if ($a['Isopen'] == $b['Isopen']) { 
       return 0; 
      } 
      return ($a['Isopen'] < $b['Isopen']) ? -1 : 1; 
     } 
+0

为了使顶部Isopen,我必须改变它可以:'return($ a ['Isopen'] <$ b ['Isopen'])? 1:-1;'似乎工作 –

0

你的功能CMP是不正确的(见我的正确使用的例子)。此外,如果你使用php 5.3+,你可以使用这样的匿名函数:

usort($data['rowResult'], function($a, $b) 
{ 
    if ($a['Isopen'] == $b['Isopen']) 
    { 
     return 0; 
    } 

    return $a['Isopen'] < $b['Isopen'] ? -1 : 1; 
});