使用数组作为函数参数php


Using an array as function parameter php

我有一个数组,我想将其作为参数传递给函数。这些数组值将用于从另一个数组中提取值并显示它们。

我的功能:

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