我在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
}
}
}
有人能帮助我吗?
感谢
答案 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;
}
}
}
注意: .
数组示例中有一个,
而不是$blackberry
。