PHP 数组排序 多维数组排序

数组排序

asort 升序 保持索引 

arsort 降序 保持索引


多维数组排序

<?php
$data[] = array('mingzi' => '张三', 'baifenbi' => 100 );
$data[] = array('mingzi' => '李四', 'baifenbi' => 25);
$data[] = array('mingzi' => '郑五', 'baifenbi' => 40);
//排序前
echo "<xmp>";
print_r($data);
echo "</xmp>";

//要求,把 baifenbi 升序排列。

//现在有了包含有行的数组 $data,但是 array_multisort() 需要一个包含列的数组,因此用以下代码来取得列,然后排序。

// 取得列的列表
foreach ($data as $key => $row) {
    $baifenbi[$key] = $row['baifenbi'];
}

// 根据 baifenbi 升序排列
// 把 $data 作为最后一个参数,以通用键排序
array_multisort($baifenbi1, $data);
//排序后
echo "<xmp>";
print_r($data);
echo "</xmp>";
?>


还能不能更灵活一点呢,每次想排序都要另外弄些数组出来吗?
其实在qeephp的helper_array类里面已经封装得很好,下面是它的两个方法,需要的人自己修改一下就可以用了:
/**
* 根据指定的键对数组排序
*
* 用法:
* @code php
* $rows = array(
*           array('id' => 1, 'value' => '1-1', 'parent' => 1),
*           array('id' => 2, 'value' => '2-1', 'parent' => 1),
*           array('id' => 3, 'value' => '3-1', 'parent' => 1),
*           array('id' => 4, 'value' => '4-1', 'parent' => 2),
*           array('id' => 5, 'value' => '5-1', 'parent' => 2),
*           array('id' => 6, 'value' => '6-1', 'parent' => 3),
* );
*
* $rows = Helper_Array::sortByCol($rows, 'id', SORT_DESC);
* dump($rows);
* // 输出结果为:
* // array(
* //         array('id' => 6, 'value' => '6-1', 'parent' => 3),
* //         array('id' => 5, 'value' => '5-1', 'parent' => 2),
* //         array('id' => 4, 'value' => '4-1', 'parent' => 2),
* //         array('id' => 3, 'value' => '3-1', 'parent' => 1),
* //         array('id' => 2, 'value' => '2-1', 'parent' => 1),
* //         array('id' => 1, 'value' => '1-1', 'parent' => 1),
* // )
* @endcode
*
* @param array $array 要排序的数组
* @param string $keyname 排序的键
* @param int $dir 排序方向
*
* @return array 排序后的数组
*/
static function sortByCol($array, $keyname, $dir = SORT_ASC)
{
  return self::sortByMultiCols($array, array($keyname => $dir));
}
/**
* 将一个二维数组按照多个列进行排序,类似 SQL 语句中的 ORDER BY
*
* 用法:
* @code php
* $rows = Helper_Array::sortByMultiCols($rows, array(
*           'parent' => SORT_ASC,
*           'name' => SORT_DESC,
* ));
* @endcode
*
* @param array $rowset 要排序的数组
* @param array $args 排序的键
*
* @return array 排序后的数组
*/
static function sortByMultiCols($rowset, $args)
{
  $sortArray = array();
  $sortRule = '';
  foreach ($args as $sortField => $sortDir)
  {
      foreach ($rowset as $offset => $row)
      {
          $sortArray[$sortField][$offset] = $row[$sortField];
      }
      $sortRule .= '$sortArray[\'' . $sortField . '\'], ' . $sortDir . ', ';
  }
  if (empty($sortArray) || empty($sortRule)) { return $rowset; }
  eval('array_multisort(' . $sortRule . '$rowset);');
  return $rowset;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值