如何移动到数组元素的顶部
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]]];
我从 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]]];