Php 根据特定值重新排列数组

Php 根据特定值重新排列数组,php,arrays,sorting,multidimensional-array,indexing,Php,Arrays,Sorting,Multidimensional Array,Indexing,我试图通过以下代码从数据库中获取值 public function get_value($userid) { $this->db->select("*"); $this->db->from("users"); $this->db->order_by("id", "desc"); $query = $this->db->get(); $r1 = $query->result(); echo "&l

我试图通过以下代码从数据库中获取值

public function get_value($userid)
{
    $this->db->select("*");
    $this->db->from("users");
    $this->db->order_by("id", "desc");
    $query = $this->db->get();
    $r1 = $query->result();
    echo "<pre>";
    print_r($r1);
    echo "</pre>";
}
我希望以一种方式重新排列数组,如果“$userid”与数组中的“id”匹配,那么该值应该位于第一个位置

e、 g如果$userid=5,那么数组应该如下所示

谁能告诉我怎么做吗?我想你可以从“按字段订购”中查看。比如:

$this->db->order_by("field(id,".$userid.")", "desc");
$this->db->order_by("id", "desc");
它将首先按字段排序,然后按id描述排序。您不需要将每个值都放在字段(id、、、、…)中,只需要放一个您想要的
字段(id,5)

在您的情况下,这应该如下所示:

usort($r1, function (stdClass $a, stdClass $b) use ($userid) {
    if ($a->id == $userid) {
        return -1;
    }

    if ($b->id == $userid) {
        return 1;
    }

    return 0;
});
试试这个:

array_merge(
  array_filter($array, function($v) use($userid) {return $v->id == $userid;}),
  array_filter($array, function($v) use($userid) {return $v->id != $userid;})
)
有关参考,请参阅:


试试这个,检查


使用where condition它看起来不像您的结果是
id
desc
@mickmackusa这只是一个示例,让您了解最简单的方法。干得好@Pierre@PierreGranger这似乎很好,但我无法解决语法错误。你能告诉我们错误是什么吗?这是一个sql错误还是php错误?@Pierre Granger我得到了这个错误:您的sql语法有一个错误;查看与您的MariaDB服务器版本相对应的手册,了解在第3行选择*FROM
users
ORDER BY field(id DESC,5)DESC,
id
DESC附近使用的正确语法。没有问题,它给了我主要的方法,谢谢
$this->db->order_by("field(id,".$userid.")", "desc");
$this->db->order_by("id", "desc");
usort($r1, function (stdClass $a, stdClass $b) use ($userid) {
    if ($a->id == $userid) {
        return -1;
    }

    if ($b->id == $userid) {
        return 1;
    }

    return 0;
});
array_merge(
  array_filter($array, function($v) use($userid) {return $v->id == $userid;}),
  array_filter($array, function($v) use($userid) {return $v->id != $userid;})
)