标签: usort

PHP 7 usort将相同的项添加到数组的末尾,在PHP 5中它添加到开头

似乎有一个未记录的变化,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的行为?

php usort php-7

3
推荐指数
1
解决办法
1308
查看次数

在php中使用usort来排序对象数组?

我确实看过了,但我仍然有点困惑......

这是$ 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排序,但是,我想我真的不确定我是否必须改变体重?或者它会按原样工作吗?我试过了,但没有输出......

php sorting object usort

2
推荐指数
1
解决办法
1万
查看次数

PHP匿名函数范围问题

我试图通过公共属性对对象数组进行排序,但是我无法将$ 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)

任何建议表示赞赏 谢谢.

php anonymous-function usort

2
推荐指数
1
解决办法
1606
查看次数

使用 php usort 进行第二次排序

所以我有相当大的数据数组,需要按两个标准对它们进行排序。

存在变量$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 arrays usort

2
推荐指数
1
解决办法
2416
查看次数

按修改日期订购此数组?

我有一个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)

我该怎么办?

谢谢 :)

php filemtime usort

2
推荐指数
1
解决办法
1322
查看次数

PHP使用uasort按具有NULL的值对多维数组进行排序

我创造了一个 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)

但是 '' 值一开始就出现了。我怎么能推''。

提前致谢。我是初学者。如果我问的问题很简单,请原谅

php arrays usort multidimensional-array

2
推荐指数
1
解决办法
1022
查看次数

在 php 中的自定义函数中进行排序

我正在尝试制作一个非常酷的超级排序功能,但是当作为内部功能创建时,用户排序功能不起作用。这个想法是命名数组和键,然后根据我的选择返回排序的数组。

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)

php usort

2
推荐指数
1
解决办法
2032
查看次数

通过最后留空/空来对 Laravel 集合进行排序

似乎无法理解对 laravel 集合进行排序的问题,因此empty/null数据最终会排在最后。(对 usort 有点困惑)

我所拥有的几乎就是一堆times/timestamps需要订购的东西。某些行可能没有该列。

我希望数据出现ASC/ascendingempty/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包含要排序的字段名称(因为它可能会更改) 错误代码处理空/空数据,但其顺序不正确。 有毛病

php collections usort laravel

2
推荐指数
1
解决办法
4297
查看次数

使用usort对数组进行排序

我有一个包含北,东,南或西值的数组.

例如,我得到了一个数组,其数值按此顺序排列:南,西和北.

现在我想对北,东,南,西排列数组.

因此,在我的示例中,值应按此顺序排列:北,南,西.

我怎样才能做到这一点?

谢谢!

php arrays sorting usort

1
推荐指数
1
解决办法
137
查看次数

codeigniter模型无法找到usort例程.

我在我的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 sorting codeigniter usort

1
推荐指数
1
解决办法
2366
查看次数