Php 如何将对象数组排序为windows资源管理器?
我尝试将对象的arrya排序为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
$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])){`