按特定键php对数据库中的数组进行排序


Sort Array From Database by Specific Key php

我有下面一个名为posts的数组,它由我的数据库中的数据组成:

Array ( [post_id] => 29 [user_id] => 2 [post_image_url] => images/w8y46ot7bsr3cpxhunq9lg2dkmf05jzvei1a.jpg ) 1
Array ( [post_id] => 41 [user_id] => 2 [post_image_url] => images/czmhng9j7qr0ite4d2w6obvl3p1k5yasxuf8.jpg ) 1
Array ( [post_id] => 42 [user_id] => 2 [post_image_url] => images/rk5e7yc9xolsd4mbnp6t2w0zaquf8i1j3ghv.jpg ) 1
Array ( [post_id] => 39 [user_id] => 2 [post_image_url] => images/wuvhtcyksmza70641n3xb5l2rqgdp8jefoi9.jpg ) 1
Array ( [post_id] => 40 [user_id] => 14 [post_image_url] => images/41io86ln7f9gcz3ep2dmvrjbya5k0wsxqthu.jpg ) 1

我正试图通过"post_id"从大到小进行排序。目前我使用的代码如下:

usort($posts, function($a, $b) { 
    return $a->post_id > $b->post_id ? -1 : 1;
});      
foreach($posts as $i){
     echo print_r($i). "<br>";
}

然而,这并不奏效。如有任何帮助,我们将不胜感激。

您的问题是使用->而不是[]访问数组的元素。更改此项:

usort($posts, function($a, $b) { 
    return $a->post_id > $b->post_id ? -1 : 1;
}); 

对此:

usort($posts, function($a, $b) { 
    return $a[post_id] > $b[post_id] ? -1 : 1;
});

Ryan关于访问数组元素的"更正"意味着好",但它有语法错误,并且会喷出一堆:

注意:使用未定义的常量post_id-假定为"post_id"

此外,他的答案比实际情况更复杂。因为你在子数组的第一列上排序,所以你可以只使用rsort(),避免使用用户定义/自定义的排序方法。亲眼目睹:

代码:(演示)

$posts=[
    ['post_id'=>29,'user_id'=>2,'post_image_url'=>'images/w8y46ot7bsr3cpxhunq9lg2dkmf05jzvei1a.jpg'],
    ['post_id'=>41,'user_id'=>2,'post_image_url'=>'images/czmhng9j7qr0ite4d2w6obvl3p1k5yasxuf8.jpg'],
    ['post_id'=>42,'user_id'=>2,'post_image_url'=>'images/rk5e7yc9xolsd4mbnp6t2w0zaquf8i1j3ghv.jpg'],
    ['post_id'=>39,'user_id'=>2,'post_image_url'=>'images/wuvhtcyksmza70641n3xb5l2rqgdp8jefoi9.jpg'],
    ['post_id'=>40,'user_id'=>14,'post_image_url'=>'images/41io86ln7f9gcz3ep2dmvrjbya5k0wsxqthu.jpg']
];
rsort($posts);
var_export($posts);

输出:

array (
  0 => 
  array (
    'post_id' => 42,
    'user_id' => 2,
    'post_image_url' => 'images/rk5e7yc9xolsd4mbnp6t2w0zaquf8i1j3ghv.jpg',
  ),
  1 => 
  array (
    'post_id' => 41,
    'user_id' => 2,
    'post_image_url' => 'images/czmhng9j7qr0ite4d2w6obvl3p1k5yasxuf8.jpg',
  ),
  2 => 
  array (
    'post_id' => 40,
    'user_id' => 14,
    'post_image_url' => 'images/41io86ln7f9gcz3ep2dmvrjbya5k0wsxqthu.jpg',
  ),
  3 => 
  array (
    'post_id' => 39,
    'user_id' => 2,
    'post_image_url' => 'images/wuvhtcyksmza70641n3xb5l2rqgdp8jefoi9.jpg',
  ),
  4 => 
  array (
    'post_id' => 29,
    'user_id' => 2,
    'post_image_url' => 'images/w8y46ot7bsr3cpxhunq9lg2dkmf05jzvei1a.jpg',
  ),
)