基本上,你循环遍历$item数组,如下所示:
array(7) {
["ID"]=>string(6) "123"
["QTY"]=>string(1) "1"
["MODEL"]=>string(11) "sdfsd"
["IMAGE"]=>string(0) ""
[1]=>
array(3) {
["option_name"]=>string(8) "Color"
["option_value"]=>string(10) "Blue"
["option_price"]=>string(6) "0.0000"
}
所以在第一次迭代中,$option将为123,尝试访问’123′[‘option_name’]将发出警告.你真正想做的是:
foreach($item[1] as $key => $option)
{
if ($key !== 'option_price')
{
echo $option;
}
}
//or:
echo $item['ID'], $item[1]['option_name'], $item['option_value'];
这就是为什么你的代码不能产生预期结果的原因.
如果子数组并不总是将1作为键,请尝试:
foreach($item as $foo)
{
if (is_array($foo))
{
echo $foo['option_name'], $foo['option_value'];
break;//we have what we needed, no need to continue looping.
}
}
这是获得所有选项的最通用方法(无论有多少)
foreach($itemlist as $item)
{
echo $item['ID'];
foreach($item as $sub)
{
if (is_array($sub))
{
foreach($sub as $key => $option)
{
echo $key, ' => ', $option;
}
}
}
}
但是看到你的选项数组看起来都有数字索引,你也可以试试这个:
foreach($itemlist as $item)
{
echo $item['ID'];
for ($i=1;isset($item[$i]);$i++)
{
foreach($item[$i] as $key => $option)
{
echo $key, ' => ', $option;
}
}
}
你可以用以下代码替换for循环:
$i=0;//or $i = 1
while(isset($item[++$i]))// or isset($item[$i++]), if $i is 1