当前位置:首页 » 编程语言 » arraysortphp

arraysortphp

发布时间: 2022-02-22 01:33:23

php函数sort如何实现数组排序

比如:<?php$people=array('name','sex','nation','birth');
foreach ($people as $mychrs)
echo $mychrs." ";
sort($people);echo "<br/---排序后---<br/";foreach ($people as $mychrs)
echo $mychrs." ";?升序排序后的数组元素显示为 birth name nation sex,当然,PHP函数sort()是区分字母大小写的(字母从大到小的顺序是:A…Z…a…z)
Sort()函数还具有第二参数,用来说明升序的规则是用来比较数字还是字符串的。比如:<?phpecho "---按数字升序排序---<br/";$num2=array('26','3',);
sort($num2,SORT_NUMERIC);
foreach ($num2 as $mychrs)
echo $mychrs." ";echo "<br/---按字符升序排序---<br/";$num3=array('26','3');
sort($num3,SORT_STRING);
foreach ($num3 as $mychrs)
echo $mychrs." ";?SORT_NUMERIC和SORT_STRING用来声明按数字或字符的升序排列。如果按照数字升序排列是:3,26;但如果按照字符升序排列则是:26,3了。

⑵ php一个数组插入到另一个数组排序不用array_multisort

<?php
$a=array(
1=>array('id'=>'001'),
2=>array('id'=>'002'),
3=>array('id'=>'004'),
4=>array('id'=>'006'),
5=>array('id'=>'008')
);
$b=array(
0=>array('id'=>'001'),
1=>array('id'=>'002'),
3=>array('id'=>'004'),
4=>array('id'=>'005'),
6=>array('id'=>'007')
);
$c=array();
foreach($aas$k=>$v)$c[$k]=$v;
foreach($bas$k=>$v)$c[$k]=$v;
print_r($c);
?>

⑶ PHP自动排序

<?php

//fetch lines to array '$lines'
$lines = file('file.txt');

//mp array before sorted;
mp_array($lines);

//filte lines which length great then 50
foreach($lines as $key => $val){
if(strlen($val) > 50){
unset($lines[$key]);
}
}

//sort array $lines by function _f() ;
usort($lines , '_f');function _f($a , $b){

$r = strlen($a) - strlen($b);

if($r != 0){

return $r;

}else{

//
}
}

//function to show contents of array
function mp_array($ary){
$i = 0 ;
foreach($ary as $v){
echo '<li>line #' ,str_pad($i++ , 4 , 0 , STR_PAD_LEFT) , ' : <span style=" font-family: Courier New; "><u>' , $v ,'</u></span>';
}
echo '<hr>';
}

//mp array after sorted;
mp_array($lines);

?>

⑷ PHP中 数组排序函数array_multisort 中参数SORT_REGULAR是默认值,具体怎么排什么叫做按正常方法排序

SORT_REGULAR - 默认。将每一项按常规顺序排列。(排序时为原来类型)
SORT_NUMERIC - 将每一项按数字顺序排列。 (排序时字符串也作为数字:11<100)
SORT_STRING - 将每一项按字母顺序排列。 (排序时数字作为字符串:100<11)

⑸ PHP数组排序 array_multisort函数详细用法跟排序方法

一、先看最简单的情况。有两个数组:

$arr1 = array(1,9,5);
$arr2 = array(6,2,4);

array_multisort($arr1,$arr2);

print_r($arr1); // 得到的顺序是1,5,9
print_r($arr2); // 得到的顺序是6,4,2

我估计两个数组的值自始至终都是对应着的:1对应6,9对应2,5对应4。

我们再加多一个数组看看会怎样:

$arr1 = array(1,9,5);
$arr2 = array(6,2,4);
$arr3 = array(3,7,8);

array_multisort($arr1,$arr2,$arr3);

查看结果,1自始至终都对应6对应3,其它项也是如此。这种对应关系就是手册中所谓的“排序时保留原有的键名关联”。

另外也可以把每个数组想象成数据库表的一列。而对应着的1,6,3为一数据行,9,2,7为另一数据行。。。

array_multisort会先按第一个数组(想象成列)排序,如果第一个数组(列)的值相同,则按第二个数组(列)排序。

具体可以用下面的程式来测试:

$arr1 = array(1,9,5,9);
$arr2 = array(6,2,4,1);
$arr3 = array(3,7,8,0);

array_multisort($arr1,$arr2,$arr3);

可以想象这里$arr3的结果是(3,8,0,7)。

二、接下来讲解array_multisort的参数。这个函数的参数很灵活。最简单的情况是如上面所示的以1个或n个数组作为参数,需要注意的是每个数组的项数要一样,否则会warning导致排序失效。

像这样array_multisort($arr1,$arr2,$arr3); 默认是所有数组都是升序排列,如果想对$arr2降序,并当作字符串去比较,就要写成:

array_multisort($arr1, $arr2, SORT_DESC, SORT_STRING, $arr3);

每个array后面可以跟一个排序顺序标志或一个排序类型标志,或者两种标志同时出现。但是每种排序标志在每个数组后面只能出现一个。

详细如下:

排序顺序标志:

SORT_ASC - 按照上升顺序排序(默认)

SORT_DESC - 按照下降顺序排序

排序类型标志:

SORT_REGULAR - 将项目按照通常方法比较(默认)

SORT_NUMERIC - 将项目按照数值比较

SORT_STRING - 将项目按照字符串比较

三、最后是array_multisort有什么实际作用。

我们通常有一些多维数组需要排序:

$guys = Array
(
[0] => Array
(
[name] => jake
[score] => 80
[grade] => A
)

[1] => Array
(
[name] => jin
[score] => 70
[grade] => A
)

[2] => Array
(
[name] => john
[score] => 80
[grade] => A
)

[3] => Array
(
[name] => ben
[score] => 20
[grade] => B
)

)
例如我们想按成绩倒序排列,如果成绩相同就按名字的升序排列。
这时我们就需要根据$guys的顺序多弄两个数组出来:
$scores = array(80,70,80,20);
$names = array('jake','jin','john','ben');
然后
array_multisort($scores, SORT_DESC, $names, $guys);就行了
还能不能更灵活一点呢,每次想排序都要另外弄些数组出来吗?
其实在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);
* mp($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;
}

⑹ php 数组排序 sort是什么排序

php的数组分为数字索引型的数组,和关键字索引的数组。
如果是数字索引的,可以这样使用:
$names = ['Tom', 'Rocco','amiona'];
sort($names);
sort()函数只接收数组这个一个参数,默认排序方式是按照字母升序排列,因为是区分大小写的,所以大写字母在前,小写字母在后。
以上排序的结果是:['Rocco', 'Tom', 'amiona']

如果还有不明白的欢迎追问!

⑺ 关于PHP中array_multisort函数的问题

<?php
$a=array("10",100,100,"a");
$b=array(1,3,"2",1);
array_multisort($a,SORT_ASC,SORT_STRING);
array_multisort($b,SORT_DESC,SORT_NUMERIC);
echo"<pre>";
var_mp($a);
var_mp($b);
echo"</pre>";
?>

SORT_STRING 是按照字母排序啊,不是按照字符串排序,是字母 a 是才字符 10字符串不算的。

array_multisort($a,SORT_ASC,SORT_STRING); 按升序排列 所以 a字母是最后的啊

你可以改

array_multisort($a,SORT_DESC,SORT_STRING); 这样 a 就是降序排列 出现一个了

⑻ php 多维数组排序

$arr=array();
for($i=0;$i<=5;$i++){
$arr[$i]['Total']=array("attribute"=>array("AmountBeforTax"=>rand()));
}
//以上是你的数组的简化版本
$key_arr=array();
//声明索引数组
foreach($arras$k=>$v){
$key_arr[$k]=$v['Total']['attribute']['AmountBeforTax'];
//将需要排序的数值加入到数组中
}
//现在$key_arr就是索引数组,是键值的关系表
array_multisort($arr,SORT_ASC,$key_arr);
//进行排序
echo"<pre>";
print_r($arr);
echo"</pre>";

有不明白的地方可以追问,满意请采纳 谢谢

⑼ PHP根据日期拆分数组

<?php
$test=array(array("date"=>"2013-08-15","supplierid"=>208),
array("date"=>"2013-08-17","supplierid"=>1252),
array("date"=>"2013-08-16","supplierid"=>1252),
array("date"=>"2013-08-18","supplierid"=>1252),
array("date"=>"2013-08-19","supplierid"=>208));
$arr=array();
//按supplierid进行分组
foreach($testas$data){
$arr[$data["supplierid"]][]=$data["date"];
}
$result=array();
$k=0;
foreach($arras$key=>$new){
sort($new);//对日期数组进行排序

$i=0;
foreach($newas$child_key=>$data){
//按日期进行分组
if($child_key){
$p=strtotime($new[$child_key])-strtotime($new[$child_key-1]);//连续性判断
if($p!="86400")
$k++;
}
$result[$k][$i]["date"]=$key;
$result[$k][$i]["supplierid"]=$data;
$i++;
}
$k++;
}
print_r($result);
?>
//给你个最精简的
//给你写这段代码花咯10多分钟,一句话都没有?你选择的那段代码是有逻辑错误的,日期差判断有误

热点内容
如何在服务器里做算 发布:2025-09-20 08:12:33 浏览:1000
易游源码 发布:2025-09-20 08:12:18 浏览:460
qq密码破解器怎么用 发布:2025-09-20 08:10:58 浏览:250
代谢数据库 发布:2025-09-20 07:46:06 浏览:11
b612存储位置 发布:2025-09-20 07:37:56 浏览:619
党政网是什么服务器 发布:2025-09-20 07:33:35 浏览:8
网易邮箱上传插件 发布:2025-09-20 07:21:09 浏览:232
在哪里看自己设置的qq密码 发布:2025-09-20 07:18:54 浏览:332
lg电视密码如何解锁 发布:2025-09-20 06:51:34 浏览:870
电信宽带代理服务器地址 发布:2025-09-20 06:26:31 浏览:327