Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Sorting_Multidimensional Array_Laravel 5 - Fatal编程技术网

PHP-根据值对多维数组子数组进行排序 排列 目标

PHP-根据值对多维数组子数组进行排序 排列 目标,php,arrays,sorting,multidimensional-array,laravel-5,Php,Arrays,Sorting,Multidimensional Array,Laravel 5,我想保持一级和二级数组及其值不变。我需要根据顺序-字段中的值对第二个子数组中的键进行排序。因此,在标明年份的地方,子数组应按ASC或DESC排序,所有其他键/值/结构/映射应保持原样 排序数组: array ( [0] => array ( [field1] => 'name' [field2] => 'text' [field3] => array ( [0] => array

我想保持一级和二级数组及其值不变。我需要根据
顺序
-字段中的值对第二个子数组中的键进行排序。因此,在标明年份的地方,子数组应按ASC或DESC排序,所有其他键/值/结构/映射应保持原样

排序数组:

array (
  [0] => array 
    (
      [field1] => 'name'
      [field2] => 'text'
      [field3] => array 
        (
          [0] => array 
            (
              [text] => 'This arrays order is to be kept!'
              [name] => 'Only sort the sub-sub-array below!'
              [order] => ''
            )
        )
    )

  [1] => array
    (
      [field1] => 'name'
      [field2] => 'text'
      [field3] => array 
        (
          [0] => array 
            (
              [text] => '2014'
              [name] => 'Dummy!'
              [order] => '1'
            )
          [1] => array 
            (
              [text] => '2013'
              [name] => 'Try me!'
              [order] => '2'
            )
          [2] => array 
            (
              [text] => '1985'
              [name] => 'Help!'
              [order] => '5'
            )
          [3] => array 
            (
              [text] => '2002'
              [name] => 'Please!'
              [order] => '4'
            )
          [4] => array 
            (
              [text] => '2007'
              [name] => 'Order!'
              [order] => '3'
            )
        )
    )
...
帮助 我花了好几个小时尝试不同的定制解决方案,主要是基于
usort()
,但我也知道这些问答都没有描述我遇到的情况

我开始怀疑这是否可能。 有人知道是不是?如果是这样的话,你能解释一下或者提供一个提示/教程/示例来演示吗

拉威尔5.1 我从一个Laravel模型中检索这个,并使用toArray()


我很高兴知道在Laravel中是否有更好的方法来实现这一点。

如果我正确理解了这个问题,这可能是一个解决方案(在这些示例中,
$arr
是保存数组的变量):

函数cmp($a,$b)
{    
退货($a['order']<$b['order'])?-1:1;
}
foreach($arr作为$key=>$subar){
foreach($subarr作为$key2=>$subsubsubarr){
如果(是_数组($subsubarr)){
usort($subsubbarr,“cmp”);
$subarr[$key2]=$SubSubSubArr;
}
}
$arr[$key]=$subar;
}

函数cmp($a,$b)
{    
退货($a['order']<$b['order'])?-1:1;
}
foreach($arr as和$subar){
foreach($subarr as和$subsubarr){
如果(是_数组($subsubarr)){
usort($subsubbarr,“cmp”);
}
}        
}

如果我正确理解了问题,这可能是一个解决方案(在这些示例中,
$arr
是保存数组的变量):

函数cmp($a,$b)
{    
退货($a['order']<$b['order'])?-1:1;
}
foreach($arr作为$key=>$subar){
foreach($subarr作为$key2=>$subsubsubarr){
如果(是_数组($subsubarr)){
usort($subsubbarr,“cmp”);
$subarr[$key2]=$SubSubSubArr;
}
}
$arr[$key]=$subar;
}

函数cmp($a,$b)
{    
退货($a['order']<$b['order'])?-1:1;
}
foreach($arr as和$subar){
foreach($subarr as和$subsubarr){
如果(是_数组($subsubarr)){
usort($subsubbarr,“cmp”);
}
}        
}

如果要排序的子数组始终由同一个键标识,则可以只排序该键的内容

function cmp($a, $b)
{    
    return ($a['order'] < $b['order']) ? -1 : 1;
}

foreach($arr as  &$subarr){
    foreach($subarr as  &$subsubarr){
        if(is_array($subsubarr)){               
                usort($subsubarr,"cmp");
        }
    }        
}
foreach($testas&$value){
//对每个值使用(^)引用将对现有值进行排序
//数组,而不是创建排序副本。
usort($value['field3'],函数($a,$b){
//对于usort比较函数,可以使用这样的匿名函数。
如果($a['order']<$b['order'])返回-1;
如果($a['order']=$b['order'])返回0;
//在“订单”关系的情况下,您可能需要添加不同键的比较
返回1;//$a['order']此时必须大于$b['order']
});
}
请注意,中使用的比较函数:

如果第一个参数被认为分别小于、等于或大于第二个参数,则必须返回小于、等于或大于零的整数


使用Laravel可能更好,因为数据库很可能比PHP更快地完成排序,但是我们需要了解更多关于模型设置的信息才能弄清楚这一点,这听起来基本上是一个完全不同的问题。

如果您要排序的子数组总是由同一个键标识,您可以只排序该键的内容

function cmp($a, $b)
{    
    return ($a['order'] < $b['order']) ? -1 : 1;
}

foreach($arr as  &$subarr){
    foreach($subarr as  &$subsubarr){
        if(is_array($subsubarr)){               
                usort($subsubarr,"cmp");
        }
    }        
}
foreach($testas&$value){
//对每个值使用(^)引用将对现有值进行排序
//数组,而不是创建排序副本。
usort($value['field3'],函数($a,$b){
//对于usort比较函数,可以使用这样的匿名函数。
如果($a['order']<$b['order'])返回-1;
如果($a['order']=$b['order'])返回0;
//在“订单”关系的情况下,您可能需要添加不同键的比较
返回1;//$a['order']此时必须大于$b['order']
});
}
请注意,中使用的比较函数:

如果第一个参数被认为分别小于、等于或大于第二个参数,则必须返回小于、等于或大于零的整数


使用Laravel可能会更好,因为数据库很可能比PHP更快地完成排序,但我们需要了解更多关于模型设置的信息才能弄清楚这一点,这听起来基本上是一个完全不同的问题。

请发布排序后数组的外观。这样我就可以理解你想要实现的目标。请发布数组排序后的外观。这样我就可以理解你想要实现什么。这似乎是实现我目标的最简单的方法,谢谢。这似乎是实现我目标的最简单的方法,谢谢。
function cmp($a, $b)
{    
    return ($a['order'] < $b['order']) ? -1 : 1;
}

foreach($arr as  &$subarr){
    foreach($subarr as  &$subsubarr){
        if(is_array($subsubarr)){               
                usort($subsubarr,"cmp");
        }
    }        
}
foreach ($test as &$value) { 
      // Using a (^) reference to each value will sort the existing 
      // array instead of creating a sorted copy.
    usort($value['field3'], function($a, $b) {
        // You can use an anonymous function like this for the usort comparison function.
        if ($a['order'] < $b['order']) return -1;
        if ($a['order'] == $b['order']) return 0;
        // In case of 'order' ties, you may want to add a comparison of a different key
        return 1; // $a['order'] must be > $b['order'] at this point
    });
}