Php 将数组中的值与另一个数组的值匹配,并将新数组中的相应值作为循环返回

Php 将数组中的值与另一个数组的值匹配,并将新数组中的相应值作为循环返回,php,arrays,Php,Arrays,我很难找到以下问题的解决方案 我需要获取一个数组($split)的第一个值,在另一个数组($array)中找到它,并将相应的值返回到一个新数组($matched),然后循环,直到$split中的所有值都已匹配并(按顺序)返回到$matched 我在下面注释了我的代码以进一步解释 <?php $split = explode('/', '1/2/3'); // $split can be any length and any order // EG. $split = explode(

我很难找到以下问题的解决方案

我需要获取一个数组(
$split
)的第一个值,在另一个数组(
$array
)中找到它,并将相应的值返回到一个新数组(
$matched
),然后循环,直到
$split
中的所有值都已匹配并(按顺序)返回到
$matched

我在下面注释了我的代码以进一步解释

<?php

$split = explode('/', '1/2/3');

// $split can be any length and any order

// EG. $split = explode('/', '1/2/3/66/4/9'); 

$result = $connection->query("SELECT id, filename FROM pages");

while ($row = $result->fetch_array()) {
    $new_array[$row['id']] = $row;
}

foreach($new_array as $array) {       

    // take first value from $split
    // match value with 'id' of $array
    // return corresponding 'filename'
    // set as first value of $matched

    $matched = // 

    // loop until all values from $split have been matched
    // and the corresponding filename has been added to $matched.

}

$join = implode('/', $matched); // join $matched as string.

?>

尝试以下示例:

    // ... some code
    $matched = array();
    foreach ( $split AS $key ) {
        if ( isset($array[$key]) ) {
            $matched[] = $array[$key];
        }
    }
    return $matched;
    // ... more code
让我们看看:

  • 您有编号列表(ID)
  • 您有map:id->filename
  • 您需要文件名(用斜杠内爆)
因此:


我会这样构建一个mysql查询:

SELECT id, filename FROM pages WHERE id IN(1,2,3,66,4,9) ORDER BY FIELD(id,1,2,3,66,4,9)
然后,在php中:

while($row = $result->fetch_assoc()) {
   $match[] = $row;
}

对于提供的信息不确定,但是修改SQL查询以仅返回正确的行是否更有意义?“从(1,2,3,66,4,9)中id所在的页面中选择id、文件名”是的,这很有意义。感谢您的建议,这会取代我当前的
foreach
循环吗?As
$array
仅在当前的
foreach
循环中定义为
foreach($new\u array As$array)
。完美且非常干净。非常感谢。来自@Matt.C(仅检索匹配行)的解决方案更好这看起来很干净,但我如何输出结果?根据需要,作为由“/”分隔的字符串,$split中分解的字符串也会动态填充,因此如果字符串只有一个部分,即“1”而不是“1/2/3/4”,则此操作将不起作用
while($row = $result->fetch_assoc()) {
   $match[] = $row;
}