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

我使用 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 内部执行此操作?


慕标5832272
浏览 123回答 2
2回答

收到一只叮咚

我建议这样的解决方案:$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) {&nbsp; &nbsp; [$one, $two] = explode(" ", $separateID);&nbsp; &nbsp; $results[] = [&nbsp; &nbsp; &nbsp; &nbsp; "id" => rtrim($two),&nbsp; &nbsp; &nbsp; &nbsp; "result" => rtrim($one),&nbsp; &nbsp; ];}usort($results, function($el1, $el2){&nbsp; &nbsp; return $el1['result'] > $el2['result'];});$listIDs = '"' . implode('","', array_column($results, 'id'));$query = "SELECT * FROM articles where id in($listIDs)";...

RISEBY

创建一个scores索引数组id,然后对其进行排序,然后提取键会更容易:foreach ($idquestionCollect as $separateID) {&nbsp;&nbsp; &nbsp; $parts = explode(" ", $separateID);&nbsp; &nbsp; if ($parts[0] < 40) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$listIDs[$parts[1]] = $parts[0];&nbsp; &nbsp; }}&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;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
打开App,查看更多内容
随时随地看视频慕课网APP