<?php
error_reporting(0);
$mmy = array(array("Chevrolet Truck", "C 1500 SERIES", "2005", "V8 5.7L (K)"),
array("Nissan Pickup", "D21 PICKUP", "1993", "2.4 L"),
array("TOYOTA CAMRY", "LE", "2001", "2.8L V6")
);
var_dump($mmy);
echo "<pre>";
echo "<h1>Data in 2-dimensional array Make/Model/Year/Engine</h1>";
echo "<ul>";
for ($row = 0; $row < 3; $row++) {
echo "<li><b>The row number $row</b>";
echo "<ul>";
for ($make = 0; $make < 4; $make++) {
echo "<li>" . $mmy[$row][$make] . "</li>";
}
for ($model = 1; $model < 4; $model++) {
echo "<li>" . $mmy[$row][$make][$model] . "</li>";
}
for ($year = 2; $year < 4; $year++) {
echo "<li>" . $mmy[$row][$make][$model][$year] . "</li>";
}
for ($eng = 3; $eng < 4; $eng++) {
echo "<li>" . $mmy[$row][$make][$model][$year][$eng] . "</li>";
}
echo "</ul>";
echo "</li>";
}
echo "</ul>";
?>
不抑制错误报告,我得到:http://dpaste.org/iy0rD/L9
我不清楚偏移错误来自哪里。我不习惯用PHP编程。我必须编写一个PHP应用程序来导入CSV文件并显示结果。这只是整个计划的一部分。现在我已经静态地定义了这个数组,以便进行测试。希望这个问题的格式正确
假设我理解您要做的事情,那么您在$ my数组上迭代的方式是不正确的。通过这样定义它:
$mmy = array(array("Chevrolet Truck", "C 1500 SERIES", "2005", "V8 5.7L (K)"),
array("Nissan Pickup", "D21 PICKUP", "1993", "2.4 L"),
array("TOYOTA CAMRY", "LE", "2001", "2.8L V6")
);
你正在创建一个包含3个条目的数组:每个数组包含4个条目。它们存储在键0-3处。因此,要对数组进行迭代,可以这样做:
for ($i = 0; $i < count($mmy); $i++) {
$row = $mmy[$i];
echo "<li><b>The row number $i</b>";
echo "<ul>";
for ($j = 0; $j < count($row); $j++) {
echo "<li>" . $row[$j] . "</li>";
}
echo "</ul>";
}
这将遍历外部行,生成一个ul标记,然后在它内部将为内部数组中的每个元素生成一个li标记。
这里只需要一个内循环。外部循环将遍历$ my中的所有顶层条目,而内部循环将遍历内部数组中的内容。
一个可能更好的解决方案是使用带有用户定义键的数组,如下所示:$mmy = array(
array('make' => "Chevrolet Truck", 'model' => "C 1500 SERIES", 'year' => "2005", 'engine' => "V8 5.7L (K)"),
array('make' => "Nissan Pickup", 'model' => "D21 PICKUP", 'year' => "1993", 'engine' => "2.4 L"),
array('make' => "TOYOTA CAMRY", 'model' => "LE", 'year' => "2001", 'engine' => "2.8L V6")
);
通过这样定义数组,您可以像这样轻松地访问每个键处的值:
$mmy[0]['make']; // This returns Chevrolet Truck, for the first (0th) element of the array, and the 'make' key
试试这个:
<?php
error_reporting(E_ALL);
$mmy = array( array("Chevrolet Truck", "C 1500 SERIES", "2005","V8 5.7L (K)"),
array("Nissan Pickup", "D21 PICKUP", "1993", "2.4 L"),
array("TOYOTA CAMRY", "LE", "2001","2.8L V6")
);
var_dump($mmy);
echo "<pre>";
echo "<h1>Data in 2-dimensional array Make/Model/Year/Engine</h1>";
echo "<ul>";
for ($row = 0; $row < 3; $row++) {
echo "<li><b>The row number $row</b>";
echo "<ul>";
for ($make = 0; $make < 4; $make++) {
echo "<li>".$mmy[$row][$make]."</li>";
}
for ($model = 3; $model < 3; $model++) {
echo "<li>".$mmy[$row][$make][$model]."</li>";
}
for ($year = 3; $year < 3; $year++) {
echo "<li>".$mmy[$row][$make][$model][$year]."</li>";
}
for ($eng = 3; $eng < 3; $eng++) {
echo "<li>".$mmy[$row][$make][$model][$year][$eng]."</li>";
}
echo "</ul>";
echo "</li>";
}
echo "</ul>";
?>
这基本上意味着数组中的offset[4]不存在。使用isset()
来确定数组中的项(键)是否存在。
for ($eng = 3; $eng < 3; $eng++) {
if (isset($mmy[$row][$make][$model][$year][$eng])) {
echo '<li>', $mmy[$row][$make][$model][$year][$eng], '</li>';
}
}
可以使用以下两个基本循环:
foreach($theArray as $row){
foreach($row as $column){
echo $column;
}
}
for($row=0;$row < count($array);$row++){
for($column=0;$column < count($array[$row]);$column++){
echo $array[$row][$column];
}
}
如果你不关心索引号,那么使用foreach方法。如果你想使用索引号,那么使用for循环。
在你的例子中,你有一个二维数组,看起来像这样:
Make | Model | Year | Engine
Chevrolet Truck | C 1500 SERIES | 2005 | V8 5.7L (K)
Nissan Pickup | D21 PICKUP | 1993 | 2.4 L
TOYOTA CAMRY | LE | 2001 | 2.8L V6
要静态访问它们,可以这样做:
$firstMake = $mmy[0][0]; //meaning first row first column
$secondMake = $mmy[1][0];
$thirdYear = $mmy[2][2];
我希望这能澄清一点。
可以使用数组迭代器:
<?php
$data = array(
array("Chevrolet Truck", "C 1500 SERIES", "2005", "V8 5.7L (K)"),
array("Nissan Pickup", "D21 PICKUP", "1993", "2.4 L"),
array("TOYOTA CAMRY", "LE", "2001", "2.8L V6")
);
$data = new ArrayObject($data);
$iterator = $data->getIterator();
while ($iterator->valid())
{
$value = $iterator->current();
echo "<ul><li>The row number is: {$iterator->key()}</li>";
for ($x = 0; $x < count($value); $x++) {
echo "<li>{$value[$x]}</li>";
}
echo "</ul>";
$iterator->next();
}
?>
注意内部循环使用count
,这确保循环只回显数组中定义的值(因此没有未定义的索引错误,应该有一个值丢失)。
错误来自echo
s。PHP报告您所请求的对象(例如$mmy[$row][$make]
)不存在。
循环结束后:
for ($make = 0; $make < 4; $make++) {
echo "<li>" . $mmy[$row][$make] . "</li>";
}
$make = 4
,所以第一次通过下一个循环,PHP试图访问不存在的$mmy[0][4][1]
。下面的循环也存在同样的错误。
您可以将循环放在彼此的内部,从而永远不会达到索引大于数组长度的点,但是您仍然需要更改数组访问,因为您正在尝试使用多维查找,但您的数组只有二维。或者,使用implode()
作为输出数据的另一种方法。
echo "<pre>";
echo "<h1>Data in 2-dimensional array Make/Model/Year/Engine</h1>";
echo "<ul>";
for ($row = 0; $row < 3; $row++) {
echo "<li><b>The row number $row</b>";
echo "<ul><li>";
echo implode("</li><li>", $mmy[$row]);
echo "</li></ul>";
echo "</li>";
}
echo "</ul>";
echo "</pre>";