我有一个数组,我想将其作为参数传递给函数。这些数组值将用于从另一个数组中提取值并显示它们。
我的功能:
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的描述。我确定这是一个愚蠢的疏忽。提前谢谢!
答案 0 :(得分:0)
问题是你在第一场比赛中回归:
if ($brand == $listbrands) {
return '<p>'.$features["description"].'</p>';
}
您需要存储所有匹配项,以便完成整个循环,然后发回匹配的所有内容。
$matches = '';
foreach( $treadmills as $brand=>&$features ) {
if ($brand == $listbrands) {
$matches .= '<p>'.$features["description"].'</p>';
}
}
return $matches;
答案 1 :(得分:0)
function showTreadmills($listbrands) {
global $treadmills;
$out = '';
foreach( $treadmills as $brand=>&$features ) {
if ($brand == $listbrands) {
$out .= '<p>'.$features["description"].'</p>';
}
}
return $out;
}
答案 2 :(得分:0)
你没有将数组传递给函数,你传递了两个字符串。你需要调用array()
来围绕它们包装一个数组:
echo showTreadmills(array('bowflexseries3','solef85'));
然后你需要改变showTreadmills
。您无法使用==
将字符串与数组进行比较。看起来你想测试字符串是否在数组中,所以它应该是:
if (in_array($brand, $listbrands))
或者不是循环遍历$treadmills
并测试它是否等于$listbands
之一,您可以遍历$listbrands
:
$result = '';
foreach ($listbrands as $brand) {
if (isset($treadmills[$brand])) {
$result .= '<p>'.$treadmills[$brand]["description"].'</p>';
}
}
return $result;
这更好,因为它循环通过较小的数组。并且in_array()
必须进行搜索,而访问关联数组只是一个哈希查找。
请注意,您需要在循环期间将结果连接到字符串中。如果您在循环中使用return
,则只返回找到的第一个品牌。