似乎有一个未记录的变化,PHP 7如何在usort函数中处理相同的结果.
$myArray = array(1, 2, 3);
usort($myArray, function($a, $b) { return 0; });
print_r($myArray);
// PHP 5:
Array
(
[0] => 3
[1] => 2
[2] => 1
)
// PHP 7
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Run Code Online (Sandbox Code Playgroud)
换句话说,在PHP 7中,usort将相等的值添加到数组的末尾,而PHP 5则将它们添加到开头.我找不到任何关于这种行为的提及.
有没有办法强制PHP 5的行为?
我确实看过了,但我仍然有点困惑......
这是$ myobject对象的样子:
Array
(
[0] => stdClass Object
(
[tid] => 13
[vid] => 4
)
[1] => stdClass Object
(
[tid] => 10
[vid] => 4
)
[2] => stdClass Object
(
[tid] => 34
[vid] => 4
)
[3] => stdClass Object
(
[tid] => 9
[vid] => 4
)
Run Code Online (Sandbox Code Playgroud)
我看到了这个:
function cmp( $a, $b )
{
if( $a->weight == $b->weight ){ return 0 ; }
return ($a->weight < $b->weight) ? -1 : 1;
}
usort($myobject,'cmp');
Run Code Online (Sandbox Code Playgroud)
我试图按照tid排序,但是,我想我真的不确定我是否必须改变体重?或者它会按原样工作吗?我试过了,但没有输出......
我试图通过公共属性对对象数组进行排序,但是我无法将$ property参数注册到内部函数中(我可以在外部函数中使用它).
我阅读文档的方式,听起来像参数可用,我误解了什么?
这是我有的:
public static function sortObjectsByProperty($objects, $property)
{
function compare_object($a, $b)
{
$a = $a->$property;
$b = $b->$property;
if ($a->$property == $b->$property)
{
return 0;
}
return ($a->$property > $b->$property) ? +1 : -1;
}
usort($objects, 'compare_object');
return $objects;
}
Run Code Online (Sandbox Code Playgroud)
任何建议表示赞赏 谢谢.
所以我有相当大的数据数组,需要按两个标准对它们进行排序。
存在变量$data['important']和$data['basic']。
它们是简单的数字,我使用 uasort
$data首先按重要排序,然后按基本排序。
所以
Important | Basic
10 | 8
9 | 9
9 | 7
7 | 9
Run Code Online (Sandbox Code Playgroud)
usort 函数很简单
public function sort_by_important($a, $b) {
if ($a[important] > $b[important]) {
return -1;
}
elseif ($b[important] > $a[important]) {
return 1;
}
else {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
如何将数组重新排序为第二个变量并保持重要顺序?
感谢大家。
编辑
在这之后添加第三个排序选项怎么样?非常重要 > 基本 > 更少
我有一个php文件,它在我的用户目录中创建了一系列数组,然后该数组被发送回iPhone.
我的php正在创建的数组按字母顺序排序,我希望它按文件创建日期排序.
这是我的php文件的样子
<?php
$username = $_GET['username'];
$path = "$username/default/";
$files = glob("{$path}/{*.jpg,*.jpeg,*.png}", GLOB_BRACE);
// output to json
echo json_encode($files);
?>
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
谢谢 :)
我创造了一个 arry 像
$arr[0]['ref']=5;
$arr[0]['name']='name0';
$arr[1]['ref']=6;
$arr[1]['name']='name1';
$arr[2]['ref']=4;
$arr[2]['name']='name2';
$arr[3]['ref']='';
$arr[3]['name']='name3';
$arr[4]['ref']='9';
$arr[4]['name']='name4';
$arr[5]['ref']=''
$arr[5]['name']='name5'
Run Code Online (Sandbox Code Playgroud)
我想像使用 ref 值一样对这个数组进行排序
$arr[2]['ref']=4;
$arr[2]['name']='name2';
$arr[0]['ref']=5;
$arr[0]['name']='name0';
$arr[1]['ref']=6;
$arr[1]['name']='name1';
$arr[4]['ref']='9';
$arr[4]['name']='name4';
$arr[3]['ref']='';
$arr[3]['name']='name3';
$arr[5]['ref']=''
$arr[5]['name']='name5'
Run Code Online (Sandbox Code Playgroud)
我试过
uasort($arr, function($a, $b){
return $a['ref'] - $b['ref'];
});
Run Code Online (Sandbox Code Playgroud)
但是 '' 值一开始就出现了。我怎么能推''。
提前致谢。我是初学者。如果我问的问题很简单,请原谅
我正在尝试制作一个非常酷的超级排序功能,但是当作为内部功能创建时,用户排序功能不起作用。这个想法是命名数组和键,然后根据我的选择返回排序的数组。
function super_sort($key,$arr){
usort($arr, function($a, $b){
return strcmp($a[$key], $b[$key]);
});
print_sorted($key,$arr);
}
Run Code Online (Sandbox Code Playgroud)
我会这样称呼它
super_sort('name',$people);
Run Code Online (Sandbox Code Playgroud)
我也应该添加 print_sorted 函数是这个
function print_sorted($key,$arr){
echo '<h1>'.$key.'</h1>';
foreach($arr as $k => $v){
echo '<strong>name:</strong> '.$v['name'].'<strong> age:</strong> '.$v['age'].'<strong> social:</strong> '.$v['social'].'<strong> index:</strong> '.$v['index'].'<br/>';
}
}
Run Code Online (Sandbox Code Playgroud) 似乎无法理解对 laravel 集合进行排序的问题,因此empty/null数据最终会排在最后。(对 usort 有点困惑)
我所拥有的几乎就是一堆times/timestamps需要订购的东西。某些行可能没有该列。
我希望数据出现ASC/ascending而empty/null数据最后显示。
$collection->sortBy('timestamp') 排序很好,但不知道如何处理空字段。
表看起来像这样。
$data = $data->sort(function($a, $b) use ($sortBy) {
if ($a->{$sortBy} and $b->{$sortBy}) return 0;
return ($a->{$sortBy} > $b->{$sortBy}) ? -1 : 1;
});
Run Code Online (Sandbox Code Playgroud)
我从互联网上尝试的随机代码,但无法正常工作。
$sortBy包含要排序的字段名称(因为它可能会更改) 错误代码处理空/空数据,但其顺序不正确。

我有一个包含北,东,南或西值的数组.
例如,我得到了一个数组,其数值按此顺序排列:南,西和北.
现在我想对北,东,南,西排列数组.
因此,在我的示例中,值应按此顺序排列:北,南,西.
我怎样才能做到这一点?
谢谢!
我在我的codeigniter应用程序中有一个模型,其中包含usort使用的以下回调函数:
function comp_primary($a, $b)
{
if ($a['pri'] == $b['pri']) {
return $a['weight'] - $b['weight'];
}
return strcmp($a['pri'], $b['weight']);
}
Run Code Online (Sandbox Code Playgroud)
我从同一个模型中调用它,只是使用不同的方法:
usort($srv_records, 'comp_primary')
Run Code Online (Sandbox Code Playgroud)
我得到的错误信息是:
严重性:警告 - > usort()期望参数2是有效的回调,找不到函数'comp_primary'或函数名无效/var/www/html/widgets/manager/models/widget_model.php 187
我试图将comp_primary上的函数签名更改为如下所示:
private function comp_primary($a, $b)
Run Code Online (Sandbox Code Playgroud)
我也尝试改变我称之为的方式,如下所示:
usort($srv_records, '$this->comp_primary');
Run Code Online (Sandbox Code Playgroud)
要么
usort($srv_records, $this->comp_primary);
Run Code Online (Sandbox Code Playgroud)
你能告诉我我错过了什么吗?谢谢!
php ×10
usort ×10
arrays ×3
sorting ×3
codeigniter ×1
collections ×1
filemtime ×1
laravel ×1
object ×1
php-7 ×1