如何移动到数组元素的顶部

how to move to the top an array element

我从 table
中选择了行 目标行是 id 等于 $_GET['id']
的行 我想将它移到行的顶部

$sq = "select * from video order by ind asc";
$st = $db->prepare($sq);
$st->execute();
$rows = $st->fetchAll();

if(isset($_GET['id'])){
    foreach($rows as $row){
        if($row['id'] == $_GET['id']){
            unset($rows[$row]);  // error line
            $rows = $row + $rows;
        }
    }
}

错误 - Illegal offset type in unset...
还有 - 有没有更短的方法来做到这一点,即避免循环
类似于:

$rows[having id equal to $_GET['id']] -> move-to-top

对于这一行,

unset($rows[$row]);  // error line

您需要取消设置 $rows 中的键而不是 $row 本身,它是 foreach 循环中的一个值。

因此,要取消设置,它看起来像:

<?php

foreach($rows as $key => $row){
    if($row['id'] == $_GET['id']){
        unset($rows[$key]); 
        // code line to move to the top 
        break;
    }
}

不要使用 $rows = $row + $rows; 种语法,因为它会在代码审查期间难以阅读。

对于更短的语法,您可以使用 array_filter to filter out the row and then perform a swap taking the help of symmetric-array-destructuring

片段:

<?php

$row = array_filter($rows, fn($arr) => $arr['id'] == $testID);
[$rows[array_keys($row)[0]], $rows[0]] = [$rows[0], $rows[array_keys($row)[0]]];

Online Demo