我有一个数组,我想将其作为参数传递给函数。这些数组值将用于从另一个数组中提取值并显示它们。
我的功能:
function showTreadmills($listbrands) {
global $treadmills;
foreach( $treadmills as $brand=>&$features ) {
if ($brand == $listbrands) {
return '<p>'.$features["description"].'</p>';
}
}
}
跑步机阵列:
$treadmills = [
'bowflexseries3' => [
'description' => 'Bowflex Series 3',
'image' => '/images/bowflex-series-3-150x150.jpg',
'url' => '/treadmills/bowflex/series-3',
],
'solef85' => [
'description' => 'Sole F85',
'image' => '/images/sole-f85-150x150.jpg',
'url' => '/treadmills/sole/f-85',
],
'endurancet10hrc' => [
'description' => 'Endurance T10HRC',
'image' => '/images/endurance-t10hrc-150x150.jpg',
'url' => '/treadmills/endurance/t10hrc',
]
];
我试图从函数中的数组中提取的值:
<?php echo showTreadmills('bowflexseries3','solef85'); ?>
这只会返回数组中的第一个描述,即Bowflex Series 3。我正试图弄清楚如何让它提取bowflexseries3和solef85的描述。我确信这是一个愚蠢的疏忽。提前感谢!
您不是在向函数传递数组,而是在传递两个字符串。您需要调用array()
来围绕它们包装一个数组:
echo showTreadmills(array('bowflexseries3','solef85'));
然后您需要更改showTreadmills
。不能使用==
将字符串与数组进行比较。看起来你想测试字符串是否在数组中,所以它应该是:
if (in_array($brand, $listbrands))
或者,您可以循环$listbrands
:,而不是循环$treadmills
并测试它是否等于$listbands
中的一个
$result = '';
foreach ($listbrands as $brand) {
if (isset($treadmills[$brand])) {
$result .= '<p>'.$treadmills[$brand]["description"].'</p>';
}
}
return $result;
这更好,因为它在较小的数组中循环。in_array()
必须进行搜索,而访问关联数组只是一个散列查找。
请注意,在循环过程中需要将结果连接到一个字符串中。如果在循环中使用return
,则只返回找到的第一个品牌。
问题是您在第一场比赛时返回:
if ($brand == $listbrands) {
return '<p>'.$features["description"].'</p>';
}
你需要存储所有匹配项,这样整个循环才能完成,然后发回所有匹配项。
$matches = '';
foreach( $treadmills as $brand=>&$features ) {
if ($brand == $listbrands) {
$matches .= '<p>'.$features["description"].'</p>';
}
}
return $matches;
function showTreadmills($listbrands) {
global $treadmills;
$out = '';
foreach( $treadmills as $brand=>&$features ) {
if ($brand == $listbrands) {
$out .= '<p>'.$features["description"].'</p>';
}
}
return $out;
}