使用数组作为函数参数php

时间:2015-03-06 21:25:54

标签: php arrays

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

我的功能:

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的描述。我确定这是一个愚蠢的疏忽。提前谢谢!

3 个答案:

答案 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,则只返回找到的第一个品牌。