为了账号安全,请及时绑定邮箱和手机立即绑定

根据字符串的一部分对 foreach 结果进行排序 - PHP

根据字符串的一部分对 foreach 结果进行排序 - PHP

PHP
慕标5832272 2023-06-24 15:36:47
我使用 foreach 循环遍历数组,并将字符串分成两部分。第一部分是分数,第二部分是 ID。就像在本例中一样"34 1",34 是分数,1 是 ID,用空格分隔。然后我将 ID 放入列表中并在 MySQL 查询中使用它。问题在于它根据初始数组中接收结果的方式对结果进行排序。我想要实现的目标是按每个 id 的分数对其进行排序在下面的示例中,"34 1","7 2","29 3"它会将其排序为1,2,3. 但我需要它是2,3,1<?php$idquestionCollect = ["34 1", "7 2", "29 3"];foreach ($idquestionCollect as $separateID) {    [$one, $two] = explode(" ", $separateID);    if ($one < 40) {        $listID.= $two . "-";    }}$listIDs = '"' . implode('","', explode('-', $listID)) . '"';$listIDs = rtrim($listIDs, ',');$query = "SELECT * FROM articles where id in($listIDs)";$result = mysqli_query($connect, $query);while ($row = mysqli_fetch_assoc($result)) {    echo $row['Respond'];}我在想,也许有一种方法可以在$idquestionCollect将其发送到 foreach 之前实际重新排列,或者也许有一种方法可以在 foreach 内部执行此操作?
查看完整描述

2 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

我建议这样的解决方案:


$idquestionCollect = ["34 1", "7 2", "29 3", "29 4", "28 5", "27 6", "27 7", "28 8", "28 9", "34 10", "34 11", "34 12", "34 13"];

$results = [];

foreach ($idquestionCollect as $separateID) {

    [$one, $two] = explode(" ", $separateID);

    $results[] = [

        "id" => rtrim($two),

        "result" => rtrim($one),

    ];

}

usort($results, function($el1, $el2){

    return $el1['result'] > $el2['result'];

});

$listIDs = '"' . implode('","', array_column($results, 'id'));

$query = "SELECT * FROM articles where id in($listIDs)";

...


查看完整回答
反对 回复 2023-06-24
?
RISEBY

TA贡献1856条经验 获得超5个赞

创建一个scores索引数组id,然后对其进行排序,然后提取键会更容易:


foreach ($idquestionCollect as $separateID) { 

    $parts = explode(" ", $separateID);

    if ($parts[0] < 40) {

         $listIDs[$parts[1]] = $parts[0];

    }

}        

asort($listIDs);

$listIDs = implode(',', array_keys($listIDs));

另一种娱乐方式:


preg_match_all('/(\d+) (\d+)/', implode('-', $idquestionCollect), $matches);

$listIDs = array_combine($matches[2], $matches[1]);

asort($listIDs);

$listIDs = implode(',', array_keys($listIDs));

对于您的数据,两者都会产生:


2,3,1


查看完整回答
反对 回复 2023-06-24
  • 2 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信