标签: usort

usort():数组由用户比较函数修改

我有一个在我们的Linux服务器上运行良好的Web应用程序,但是当使用PHP 5.3在Zend Community Edition Server上运行Mac OS时,我们收到错误消息:

usort():数组由用户比较函数修改

每次页面第一次加载时(页面加载和加载大约需要2分钟),在Linux服务器上页面加载1秒钟.

有没有其他人经历过这个或有任何想法如何解决问题,我已经尝试过玩PHP和Apache内存设置没有运气.

php usort

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

传递额外参数以进行回调

我有以下功能.Wordpress功能,但这确实是一个PHP问题.他们$term根据artist_lastname每个对象元数据中的属性对对象进行排序.

我想$meta在第一个函数中传入一个字符串.这将允许我重用此代码,因为我可以将其应用于各种元数据属性.

但我不知道如何将额外的参数传递给usort回调.我试图制作一个JS风格的匿名函数,但服务器上的PHP版本太旧了,引发了语法错误.

任何帮助 - 或者向手册右上角推 - 都非常感激.谢谢!

function sort_by_term_meta($terms, $meta) 
{
  usort($terms,"term_meta_cmp");
}

function term_meta_cmp( $a, $b ) 
{
    $name_a = get_term_meta($a->term_id, 'artist_lastname', true);
    $name_b = get_term_meta($b->term_id, 'artist_lastname', true);
    return strcmp($name_a, $name_b); 
} 
Run Code Online (Sandbox Code Playgroud)

php wordpress callback usort

38
推荐指数
3
解决办法
3万
查看次数

如何通过嵌套在里面的元素对PHP数组进行排序?

我有一个如下数组:

Array
(
    [0] => Array
        (
            'name' => "Friday"
            'weight' => 6
        )
    [1] => Array
        (
            'name' => "Monday"
            'weight' => 2
        )
)

我想获取该数组中的最后一个值('weight'),并使用它来对主数组元素进行排序.所以,在这个数组中,我想对它进行排序,以便'Monday'元素出现在'Friday'元素之前.

php arrays sorting usort multidimensional-array

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

使用PHP对多维数组进行排序时保留数组索引键

array(10) { 
[1019]=> array(3) { ["quantity"]=> int(0) ["revenue"]=> int(0) ["seller"]=> string(5) "Lenny" } 
[1018]=> array(3) { ["quantity"]=> int(5) ["revenue"]=> int(121) ["seller"]=> string(5) "Lenny" } 
[1017]=> array(3) { ["quantity"]=> int(2) ["revenue"]=> int(400) ["seller"]=> string(6) "Anette" } 
[1016]=> array(3) { ["quantity"]=> int(25) ["revenue"]=> int(200) ["seller"]=> string(6) "Samuel" } 
[1015]=> array(3) { ["quantity"]=> int(1) ["revenue"]=> int(300) ["seller"]=> string(6) "Samuel" } 
[1014]=> array(3) { ["quantity"]=> string(2) "41" ["revenue"]=> string(5) "18409" ["seller"]=> string(6) "Samuel" }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用上面的数组.调用这个多维数组$stats.

我想按数量对这个数组进行排序.

因此,multidim阵列具有其第一阵列1016,然后是1018,1017等等.

我这样做是通过:

                function compare($x, $y) …
Run Code Online (Sandbox Code Playgroud)

php usort

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

如何工作?

我已经看过php文档,在线教程,但没有一个是如何实际工作的.我有一个例子,我在下面玩.

$data = array(

    array('msg' => 'some text','month' => 11,'level' => 10),

    array('msg' => 'some text','month' => 5,'level' => 10),

    array('msg' => 'some text','month' => 8,'level' => 10),

    array('msg' => 'some text','month' => 12,'level' => 10),

    array('msg' => 'some text','month' => 2,'level' => 10),

    array('msg' => 'some text','month' => 3,'level' => 10),

    array('msg' => 'some text','month' => 4,'level' => 10),

    array('msg' => 'some text','month' => 7,'level' => 10),

    array('msg' => 'some text','month' => 10,'level' => 10),

    array('msg' => 'some text','month' …
Run Code Online (Sandbox Code Playgroud)

php sorting usort multidimensional-array

22
推荐指数
3
解决办法
3万
查看次数

下降

当我尝试从这里应用以下代码

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});
Run Code Online (Sandbox Code Playgroud)

它以升序给出了结果.

输出:

0
0
0
0
0
0.29
1.09
6.33
Run Code Online (Sandbox Code Playgroud)

在交换$ a和$ b时,除了一个值之外,它按降序给出结果

usort($myArray, function($a, $b) {
    return $b['order'] - $a['order'];
});
Run Code Online (Sandbox Code Playgroud)

输出:

6.33
1.09
0
0
0
0
0.29
0
Run Code Online (Sandbox Code Playgroud)

我想按以下顺序得到结果:

6.33
1.09
0.29
0
0
0
0
0
Run Code Online (Sandbox Code Playgroud)

我如何实现同样的目标.

php arrays sorting usort multidimensional-array

17
推荐指数
4
解决办法
3万
查看次数

PHP usort不会排序

这是要排序的元素数组的示例:

$items = 
    array
      0 => 
        object(stdClass)[8]
          public 'id' => string '110' (length=3)
          public 'brand_id' => string '18' (length=2)
            array
              0 => string ' OT-708' (length=7)
          public 'failed' => null
          public 'diff' => null
      1 => 
        object(stdClass)[9]
          public 'id' => string '161' (length=3)
          public 'brand_id' => string '18' (length=2)
Run Code Online (Sandbox Code Playgroud)

所以,让我们说我想排序brand_id.这是我的usort回调函数:

function _compare($itemA, $itemB){

    if ($itemA->brand_id == $itemB->brand_id) {

        return 0; 
    }
    else{
        return strcmp($itemA->brand_id, $itemB->brand_id); //just an example...
    }

}
Run Code Online (Sandbox Code Playgroud)

当我什么usort($items, '_compare'); var_dump($items);都没发生的时候.有关如何排除故障的任何线索?

--UPDATE--

好的,我已将问题简化为:

function …
Run Code Online (Sandbox Code Playgroud)

php usort

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

PHP的USORT回调函数参数

这是一个非常深奥的问题,但我真的很好奇.我今天第一次使用usort,而且我对目前的情况特别感兴趣.假设我有以下数组:

$myArray = array(1, 9, 18, 12, 56);
Run Code Online (Sandbox Code Playgroud)

我可以用usort排序:

usort($myArray, function($a, $b){
  if ($a == $b) return 0;
  return ($a < $b) ? -1 : 1;
});
Run Code Online (Sandbox Code Playgroud)

我不是100%清楚两个参数$ a和$ b的情况.它们是什么,它们代表什么.我的意思是,我可以假设$ a代表数组中的当前项目,但这与之相比究竟是什么?什么是$ b?

我可以增加我的数组以包含字符串:

$myArray = array(
  array("Apples", 10),
  array("Oranges", 12),
  array("Strawberries", 3)
);
Run Code Online (Sandbox Code Playgroud)

并运行以下内容:

usort($myArray, function($a, $b){
  return strcmp($a[0], $b[0]);
});
Run Code Online (Sandbox Code Playgroud)

这将根据[0]索引值按字母顺序对我的子数组进行排序.但是这并不能说明$ a和$ b是什么.我只知道匹配我正在寻找的模式.

有人可以提供一些关于实际发生的事情的清晰度吗?

php usort

11
推荐指数
2
解决办法
9697
查看次数

在PHP中使用uasort访问数组键

如果uasort在PHP中有一个相当基本的函数,如下所示:

uasort($arr, function($a, $b) {
                if ($a > $b)
                    return -1;
                if ($a < $b)
                    return 1;
...
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试排序的数组如下所示:

{[1642] => 1, [9314] => 4, [1634] => 3 ...}
Run Code Online (Sandbox Code Playgroud)

它包含整数,这是我的主要比较标准.但是,如果整数相等,那么我想在uasort函数内部访问它们的键值,并用它做一些魔术来从中找出排序.

我不知道该怎么做,因为它似乎$a$b那得到传递给函数的变量仅仅是整数没有相应的密钥,但因为我用函数实际上应该有访问密钥以及方式保留钥匙.有任何想法吗?

php arrays sorting usort

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

PHP usort重新排序数组的排序值对所有人来说都是一样的

我正在使用usort对每个元素中的关联数组进行排序.

当我在数组中排序的所有值都相同时,它仍然会改变数组中元素的位置,有没有办法防止这种情况?

例如:

array(
    array('name' => 'Ben', 'authn_weight' => 85.3),
    array('name' => 'Josh', 'authn_weight' => 85.3),
    array('name' => 'Fred', 'authn_weight' => 85.3)
);
Run Code Online (Sandbox Code Playgroud)

可以改为:

array(
    array('name' => 'Josh', 'authn_weight' => 85.3),
    array('name' => 'Ben', 'authn_weight' => 85.3),
    array('name' => 'Fred', 'authn_weight' => 85.3)
);
Run Code Online (Sandbox Code Playgroud)

这是排序功能:

private function weightSortImplementation($a, $b){ 
    $aWeight = $a['autn_weight'];
    $bWeight = $b['autn_weight'];

    if ($aWeight == $bWeight) {
        return 0;
    }
    return ($aWeight < $bWeight) ? 1 : -1;
}
Run Code Online (Sandbox Code Playgroud)

我已经检查过该weightSortImplementation函数总是返回0表示它们是相同的.那为什么这仍然重新排序阵列?

php sorting usort

7
推荐指数
2
解决办法
2146
查看次数

标签 统计

php ×10

usort ×10

sorting ×5

arrays ×3

multidimensional-array ×3

callback ×1

wordpress ×1