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;
}