未知的“ usort()期望参数1为数组,给定为空”错误

时间:2019-03-25 13:39:59

标签: php arrays usort

如今,

我试图通过将变量传递给函数来对数组进行排序。我可以很好地打印并与数组进行交互,但是由于某种原因我无法将其传递给函数。

我尝试打印该数组以查看它是否实际上有任何数据,结果证明它具有我需要的所有数据。

在这里我初始化$ filesinfo变量

<?php
  $path = 'uploads/'.$file;
  $LastModified = filemtime($path);
  $filesize = filesize($path);
  $filextension = explode(".",$file);
  $filetp = end($filextension);
  $filesinfo[] = array($path, $LastModified, $filesize, $filetp);
  $size = filesize($path);
  $units = array( 'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
  $power = $size > 0 ? floor(log($size, 1024)) : 0;
  echo number_format($size / pow(1024, $power), 2, '.', ',') . ' ' . $units[$power]; ?></td>
  <td><?php echo date("F d Y H:i:s",filemtime("uploads/".$file));?></td>
  <td><?php  $ext = explode(".",$file); echo end($ext);?></td>
  <td class="actions"><?php echo '<a class="btn btn-success" href="rename.php?name='.$file.'">Rename</a><form action="main.php" method="POST"> <button class="btn btn-danger" type="submit" name="del" value="'.$file.'">Delete</button></form>';?></td>
</tr>
<?php
  }
}
?>
<?php endforeach; ?>

这是我试图将$ filesinfo传递给函数的地方,它说参数为空。

<?php
print_r($filesinfo);
if ($_GET['sort']==="date" && $_GET['type']==="desc") {
  SortByDate($filesinfo);
}elseif($_GET['sort']=="date" && $_GET['type']=="asc"){
  SortByDateAsc($filesinfo);
}elseif($_GET['sort']=="name" && $_GET['type']=="desc"){
  SortByNameDsc($filesinfo);
}elseif($_GET['sort']=="name" && $_GET['type']=="asc"){
  SortByNameAsc($filesinfo);
}elseif($_GET['sort']=="size" && $_GET['type']=="desc"){
  SortBySizeDsc($filesinfo);
}elseif($_GET['sort']=="size" && $_GET['type']=="asc"){
  SortBySizeAsc($filesinfo);
}elseif($_GET['sort']=="type" && $_GET['type']=="asc"){
  SortByTypeAsc($filesinfo);
}elseif($_GET['sort']=="type" && $_GET['type']=="desc"){
  SortByTypeDsc($filesinfo);
}

}

这是我的功能之一。


function SortByDate(&$Files) {
usort($Files, function($a, $b) {
return $a['1'] <=> $b['1'];
});
}

所有这些功能几乎相同,它们只是改变内容的排序方式并返回值。但是,即使它是一个数组,我仍然不能将$ filesinfo作为参数。

更新:很抱歉,发布的功能错误,这是打印输出

Array ( [0] => Array ( [0] => uploads/bootstrap-45c98b856dc045.zip [1] => 1553512534 [2] => 2705432 [3] => zip ) [1] => Array ( [0] => uploads/pointillist5c94d2e7eec5d.bmp [1] => 1553257191 [2] => 1080054 [3] => bmp ) [2] => Array ( [0] => uploads/sfdes.jpg [1] => 1553265149 [2] => 1246909 [3] => jpg ) [3] => Array ( [0] => uploads/ssser.sql [1] => 1553239646 [2] => 13098 [3] => sql ) [4] => Array ( [0] => uploads/vvv.jpg [1] => 1553263350 [2] => 879394 [3] => jpg ) [5] => Array ( [0] => uploads/wadaw.jpg [1] => 1553264937 [2] => 1246909 [3] => jpg ) [6] => Array ( [0] => uploads/wadawv.mp3 [1] => 1553263463 [2] => 4113874 [3] => mp3 ) ) 

2 个答案:

答案 0 :(得分:3)

说明:

  

usort —使用用户定义的比较函数按值对数组进行排序

声明:

usort ( array &$array , callable $value_compare_func ) : bool

使用usort的正确方法是:

// comparator which will be passed to usort
function comparator($a, $b) {
    return ($a < $b) ? -1 : $a == $b ? 0 : 1;
}

$arr = array(1, 3, 5, 1);

usort($arr, "comparator"); // passing the comparator

答案 1 :(得分:1)

这太愚蠢了,我切换到xampp,它工作正常。我不知道是什么问题,可能是某些请求问题。