Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组排序_Php_Arrays_Compare - Fatal编程技术网

PHP数组排序

PHP数组排序,php,arrays,compare,Php,Arrays,Compare,我用php创建了以下数组 // array stored in $items Array ( [0] => Array ( [description] => some text [value] => 20 ) [1] => Array ( [descripti

我用php创建了以下数组

// array stored in $items    
Array
    (
        [0] => Array
            (
                [description] => some text
                [value] => 20
            )
        [1] => Array
            (
                [description] => bord
                [value] => 5
            )
        [2] => Array
            (
                [description] => axe
                [value] => 99
            )
    )
我想要的是bord的描述是最后一个元素。我知道php有uasort函数来编写自己的自定义排序函数

我试过的方法如下

uasort($items, function($a, $b){
    if($a['description'] == 'bord'){
      return 0;  
    } 

    return ($a['description'] < $b['description']) ? -1 : 1;
});
如果我使用以下uasort:

uasort($items, function($a, $b){
    if($a['description'] == 'bord'){
      return 1;  
    } 

    return -1;
});

结果是正确的,但我从未使用过$b。

通过返回0,您告诉它不要使用“bord”项目的位置,并且仅当它是比较中的第一个变量($a)时。如果你想把它压到底,你需要告诉它如何治疗这两种情况下的“bord”

uasort($items, function($a, $b){
    if($a['description'] == 'bord'){
      return 1;  
    }

    if ($b['description'] == 'bord') {
        return -1;
    }

    return ($a['description'] < $b['description']) ? -1 : 1;
});
uasort($items,function($a,$b){
如果($a['description']=='bord'){
返回1;
}
如果($b['description']=='bord'){
返回-1;
}
报税表($a['description']<$b['description'])?-1:1;
});
编辑:为了进一步解释,
uasort()
获取所提供数组中相邻的两个元素,并将它们分配给$a和$b变量。当您的比较函数返回一个正数时,它意味着$a应该移动到低于$b的位置。当它返回负数时,$a应高于$b。当它返回零时,$a和$b相等

如果我将数组简化为
$items=['some_text','bord','axe']
并运行类似的uasort函数,然后步骤如下所示:

  • bord
    某些文本进行比较,结果=1

    新订单:
    ['some_text','bord','axe']

  • axe
    bord
    进行比较,结果=-1

    新订单:
    ['some_text','axe','bord']

  • 某些文本
    axe
    进行比较,结果=1

    新订单:
    ['axe','some_text','bord']


  • 最后一个是最终结果。

    返回0时,您是在告诉它不要处理“bord”项的位置,并且仅当它是比较中的第一个变量($a)时。如果你想把它压到底,你需要告诉它如何治疗这两种情况下的“bord”

    uasort($items, function($a, $b){
        if($a['description'] == 'bord'){
          return 1;  
        }
    
        if ($b['description'] == 'bord') {
            return -1;
        }
    
        return ($a['description'] < $b['description']) ? -1 : 1;
    });
    
    uasort($items,function($a,$b){
    如果($a['description']=='bord'){
    返回1;
    }
    如果($b['description']=='bord'){
    返回-1;
    }
    报税表($a['description']<$b['description'])?-1:1;
    });
    
    编辑:为了进一步解释,
    uasort()
    获取所提供数组中相邻的两个元素,并将它们分配给$a和$b变量。当您的比较函数返回一个正数时,它意味着$a应该移动到低于$b的位置。当它返回负数时,$a应高于$b。当它返回零时,$a和$b相等

    如果我将数组简化为
    $items=['some_text','bord','axe']
    并运行类似的uasort函数,然后步骤如下所示:

  • bord
    某些文本进行比较,结果=1

    新订单:
    ['some_text','bord','axe']

  • axe
    bord
    进行比较,结果=-1

    新订单:
    ['some_text','axe','bord']

  • 某些文本
    axe
    进行比较,结果=1

    新订单:
    ['axe','some_text','bord']


  • 最后一个是最终结果。

    uasort
    用于关联数组,但数组不是这样。您应该改用
    usort

    usort($items, function($a, $b){
        if($a['description'] == 'bord'){
            return 1;  
        } 
       if($b['description'] == 'bord'){
            return -1;  
        } 
        return 0;
    });
    
    工作原理:您希望最后一个元素是
    description
    ='bord'。这意味着你认为它比其他元素更大。如果你考虑一个更大的,你必须返回1,而如果你考虑B大一点,你需要返回1。p>
    在这里,对于所有其他情况,我们返回0,这意味着它们的顺序将保持不变

    uasort
    用于关联数组,但您的数组并非如此。您应该改用
    usort

    usort($items, function($a, $b){
        if($a['description'] == 'bord'){
            return 1;  
        } 
       if($b['description'] == 'bord'){
            return -1;  
        } 
        return 0;
    });
    
    foreach($items as $key => $thing) {
    if(in_array("bord",$key[description])) { 
        //set aside 
          $last_description=$key[description];
          $last_value=$key[value];
                                               }
    
    $new_array[]=array("description"=>$key[description],"value"=>$key[value];
    }    //now, add it back on
    $new_array[]=array("description"=>$last_description,"value"=>$last_value);
    
    工作原理:您希望最后一个元素是
    description
    ='bord'。这意味着你认为它比其他元素更大。如果你考虑一个更大的,你必须返回1,而如果你考虑B大一点,你需要返回1。p> 在这里,对于所有其他情况,我们返回0,这意味着它们的顺序将保持不变

    foreach($items as $key => $thing) {
    if(in_array("bord",$key[description])) { 
        //set aside 
          $last_description=$key[description];
          $last_value=$key[value];
                                               }
    
    $new_array[]=array("description"=>$key[description],"value"=>$key[value];
    }    //now, add it back on
    $new_array[]=array("description"=>$last_description,"value"=>$last_value);
    
    如果阵列较大,速度可能会变慢


    如果在较大的数组中使用var_导出,并使用我们可以复制/粘贴到副本的结果更新问题,这可能会变慢

    。添加了一些更新,在使用print_rIf打印后,在数组中使用var_导出,并使用我们可以复制/粘贴到副本的结果更新问题。添加了一些更新,在使用print_rThx打印后,这是可行的,但仍然无法了解$a和$b与1、-1和0的关系。你能试着更深入地解释一下吗?Thx这是可行的,但仍然不知道$a和$b与1、-1和0的关系。你能试着更深入地解释一下吗?如果我理解正确的话,当文本而不是数字的键我需要使用uasort,但现在它们是数字,所以用usort代替吗?uasort保留键。这不一定只适用于关联数组,因为您可能希望项目也保留其数字键。因此,如果我理解正确,当文本而非数字的键需要使用uasort时,但现在它们是数字,因此usort?uasort保留键。它不一定只适用于关联数组,因为您可能希望项目也保留其数字键。