从$$变量[0]获取数组值(数组的值)

时间:2014-03-19 00:14:47

标签: php arrays

我在PHP上有问题

我有一些数组

$hp = array('samsung', 'iphone', 'blackberry');

$samsung = array(array('Tab', 3,2),array('Note', 4), array('Mini', 5, 6, 8));
$iphone = array(array('2G', 2, 3, 6),array('4S', 5), array('5', 2,2), array('3GS', 2,7));
$blackberry = array(array('onix', 2),array('curve', 2, 6), array('armstrong', 5), array('gemini', 8. 1));

我需要从hp($ hp)类型列表中计算值,我试过这个但是失败了;

for($p=0; $p=count($hp); $p++){ //this ok can get count of $hp = 3
    for($i=0; $i=count($$hp[$p]); $i++){ //this ok can get count of type from $hp[index], if samsung = 3, if iphone= 4, if blackberry = 4
        for($u=0; $i=count($$hp[$p][$i]); $u++){ //this fail to get count the next level of hp type, should be if samsung[0] = 3, samsung[1] = 2, samsung[2]=4 
            //any code here
        }
   }
}
有人能帮助我吗?

感谢

3 个答案:

答案 0 :(得分:1)

与人们认为的情况一样,他们需要"变量" ($$something),你真正想要的是一个关联数组:

$phones = array(
    'samsung' => array(array('Tab', 3,2),array('Note', 4), array('Mini', 5, 6, 8)),
    'iphone' => array(array('2G', 2, 3, 6),array('4S', 5), array('5', 2,2), array('3GS', 2,7)),
    'blackberry' = array(array('onix', 2),array('curve', 2, 6), array('armstrong', 5), array('gemini', 8, 1))
);

现在,您的$hp数组不代表一组变量名称,它代表数据结构中的键,这更有意义。 (如果以后要将这些列表存储在数据库或配置文件中,您应该选择变量名,而不是您的程序。)

作为scrowler points out,您还可以使用foreach而不是for循环来获得更易读的代码:

$phones_wanted = array('samsung', 'iphone', 'blackberry');

foreach($phones_wanted as $phone_key) {
    echo 'Phone: ', $phone_key, PHP_EOL;

    // This is the point where you thought you needed a variable variable, but don't
    foreach($phones[$phone_key] as $model) {

        echo 'Model: ', $model, PHP_EOL;
        foreach($model as $value) {
            echo 'Value: ', $value, PHP_EOL;
        }
    }
}

请注意,我还使用了更有意义的变量名称。您最初的错误是您在两个不同的循环中使用$i。它更容易阅读:

for ($model_index=1; $model_index=count($phones_wanted[$phone_index][$model_index]); $model_index++)

比:

for($i=0; $i=count($$hp[$p][$i]); $i++){

答案 1 :(得分:0)

您没有正确访问数组以进行计数。您需要使用$i代替$u。此外,您再次使用$i覆盖变量$i=count($$hp[$p][$u]);。另外,我认为您正在为<和其他人寻找=而不是$i=count($$hp[$p][$i]);

for($p=0; $p<count($hp); $p++){ //this ok can get count of $hp = 3
    for($i=0; $i<count($$hp[$p]); $i++){ //this ok can get count of type from $hp[index], if samsung = 3, if iphone= 4, if blackberry = 4
        for($u=0; $u<count($$hp[$p][$i]); $u++){ //this fail to get count the next level of hp type, should be if samsung[0] = 3, samsung[1] = 2, samsung[2]=4 
            //any code here
        }
   }
}

建议 IMSoP ,您可能希望使用更多详细的变量名称,这些变量名称不是一个字母,以避免将来出现错误。

答案 2 :(得分:0)

这里有一个foreach loop会更容易处理,所以你不必处理这么多的迭代器/数字 - 你可以很容易地分配一个很好命名的变量来处理每个级别,例如电话,型号,规格,功能等。您只需要以这种方式处理一个variable variable

试试这个:

foreach($hp as $phone) {
    echo 'Phone: ' . $phone . PHP_EOL;
    foreach($$phone as $model) {
        foreach($model as $value) {
            echo 'Value: ' . $value . PHP_EOL;
        }
    }
}

See it working


注意: .数组示例中有一个,而不是$blackberry