PHP中如何在保留数组原有顺序的前提下校验数组值与数据库值匹配
解决方案
你原有代码的核心问题是遍历顺序跟随数据库返回的$rows,自然无法匹配$ids的顺序,且in_array($row['id'], $ids[$i])写法存在语法错误(第二个参数为单个字符串而非数组)。
推荐采用「先建映射、再按ID顺序匹配」的方案,性能更高也能完美保序:
$images = array(); $ids = array( 0 => '41', 1 => '42', 2 => '43', 3 => '44' ); // 数据库示例数据 $rows = array( 0 => array( 'name' => 'John Doe', 'id' => '42' ), 1 => array( 'name' => 'Jane Doe', 'id' => '43' ), ); // 1. 构建ID到行数据的映射表,单次遍历即可完成,后续查找效率O(1) $rowMap = []; foreach ($rows as $row) { $rowMap[$row['id']] = $row; } // 2. 按$ids的原有顺序遍历匹配 foreach ($ids as $index => $id) { if (isset($rowMap[$id])) { // 要保留缺失ID的占位就用$images[$index]赋值 $images[$index] = [ 'id' => $id, 'name' => $rowMap[$id]['name'] ]; // 不需要保留占位直接用$images[]赋值,顺序依然和$ids匹配 } }
效果说明
示例代码运行后,$images的索引完全对应$ids的原有索引:索引1存ID42的John Doe、索引2存ID43的Jane Doe,完全符合保序要求。如果需要给未匹配到的ID补默认值,在else分支补充对应逻辑即可。
内容的提问来源于stack exchange,提问作者TheDude42
相关产品推荐
相关产品推荐

