【问题标题】:rearrange the array according to specific value根据特定值重新排列数组
【发布时间】:2017-12-27 03:12:54
【问题描述】:

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

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>";
}

我得到以下数组

Array
(
    [0] => stdClass Object
        (
            [id] => 3
            [fullname] => user 3               
        )

    [1] => stdClass Object
        (
            [id] => 4
            [fullname] => User 4                
        )
     [2] => stdClass Object
        (
            [id] => 5
            [fullname] => User 5                
        )

    [3] => stdClass Object
        (
            [id] => 6
            [fullname] => User 6                
        )
)

我希望重新排列数组,如果“$userid”与数组中的“id”匹配,那么该值应该在第一个位置

例如,如果 $userid = 5,则数组应如下所示

Array
(
    [0] => stdClass Object
        (
            [id] => 5
            [fullname] => User 5                
        )
    [1] => stdClass Object
        (
            [id] => 3
            [fullname] => user 3               
        )

    [2] => stdClass Object
        (
            [id] => 4
            [fullname] => User 4                
        )

    [3] => stdClass Object
        (
            [id] => 6
            [fullname] => User 6                
        )
)

谁能告诉我怎么做

【问题讨论】:

  • 使用where条件
  • 您的结果看起来不像是iddesc
  • @mickmackusa 它只是一个示例,以提供数组的概念

标签: php arrays sorting multidimensional-array indexing


【解决方案1】:

我认为您可以从“按字段排序”进行检查。类似的东西:

select * from users order by field(id,5) desc, id desc 

它将首先按字段排序,然后按 id desc 排序。您不需要将每个值都放入字段中(id,?,?,?...),您只需要放入您想要的field(id,5)

https://www.electrictoolbox.com/mysql-order-specific-field-values/

在你的情况下,这应该是这样的:

$this->db->order_by("field(id,".$userid.")", "desc");
$this->db->order_by("id", "desc");

【讨论】:

  • 最简单的方法。干得好@皮埃尔
  • @Pierre Granger 看起来很棒,但我是语法错误,我无法解决
  • 你能告诉我们错误是什么吗?是sql错误还是php?
  • @Pierre Granger 我收到此错误:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 3 行的 'DESC, 5) DESC, id DESC' 附近使用正确的语法 SELECT * FROM users ORDER BY field(id DESC, 5) DESC, @ 987654327@DESC
  • 没问题,它给了我主要的思路,谢谢
【解决方案2】:

试试这个:

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

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

    return 0;
});

参考见:

【讨论】:

    【解决方案3】:

    试试这个,检查 live demo

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

    【讨论】:

      猜你喜欢
      • 2021-12-19
      • 1970-01-01
      • 2016-07-26
      • 2020-06-17
      • 1970-01-01
      • 2021-12-24
      • 2019-03-17
      • 2020-12-10
      • 2020-02-21
      相关资源
      最近更新 更多