Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 如何将对象数组排序为windows资源管理器?_Php - Fatal编程技术网

Php 如何将对象数组排序为windows资源管理器?

Php 如何将对象数组排序为windows资源管理器?,php,Php,我尝试将对象的arrya排序为windows资源管理器,实际上我尝试了以下方法: $array = [ ['name' => '861_Villa Foo (1).jpg'], ['name' => '861_Villa Hello (11).jpg'], ['name' => '861_Villa World (2.1).jpg'] ]; usort($array, function($a, $b) { return strcmp($a['n

我尝试将对象的arrya排序为windows资源管理器,实际上我尝试了以下方法:

$array = [
    ['name' => '861_Villa Foo (1).jpg'],
    ['name' => '861_Villa Hello (11).jpg'],
    ['name' => '861_Villa World (2.1).jpg']
];

usort($array, function($a, $b)
{
    return strcmp($a['name'], $b['name']);
});

var_dump($array);
电流输出:

array(3) {
  [0]=>
  array(1) {
    ["name"]=>
    string(21) "861_Villa Foo (1).jpg"
  }
  [1]=>
  array(1) {
    ["name"]=>
    string(24) "861_Villa Hello (11).jpg"
  }
  [2]=>
  array(1) {
    ["name"]=>
    string(25) "861_Villa World (2.1).jpg"
  }
}
我希望Windows资源管理器具有相同的组织结构,因此希望输出如下:

861_Villa Foo (1).jpg, 861_Villa World (2.1).jpg, 861_Villa Hello (11).jpg

您可以使用正则表达式和
preg_match
提取括号内的数字,并在文件名中有括号和括号内的数字时将提取的值作为浮点数进行比较。否则,您可以正常进行比较

像这样的方法应该会奏效:

   <?php

$array = [
    ['name' => '861_Villa Foo (1).jpg'],
    ['name' => '861_Villa Hello (11).jpg'],
    ['name' => '861_Villa World (2.1).jpg']

];

usort($array, function($a, $b)
{
preg_match("/\(([^)]+)\)/",$a['name'],$a_matches);
preg_match("/\(([^)]+)\)/",$b['name'],$b_matches);

$a_match=(float)end($a_matches);
$b_match=(float)end($b_matches);

if($a_match && $b_match){

return $a_match>$b_match;

}else{

return strcmp($a['name'], $b['name']);

}

});

var_dump($array);

这是否回答了您的问题?我在这一行得到
未定义的偏移量:1
如果(!empty((float)$a_val[1])&&!empty((float)$b_val[1])){`