1
<?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 编程。我必须编写一个导入 CSV 文件并显示结果的 PHP 应用程序。这只是整个计划的一部分。现在我已经静态定义了数组以用于测试目的。希望这个问题的格式正确。

4

6 回答 6

0

错误来自echos。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>";
于 2013-03-20T13:37:02.547 回答
0

尝试这个:

<?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>";
?>
于 2013-03-20T13:18:30.370 回答
0

假设我了解您要执行的操作,那么您迭代 $mmy 数组的方式是不正确的。通过这样定义:

$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 标记。

这里只需要一个内循环。外部循环将遍历 $mmy 中的所有顶级条目,而内部循环将遍历内部数组中的内容。

一个可能更好的解决方案是使用带有用户定义键的数组,如下所示:

$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
于 2013-03-20T13:21:10.823 回答
0

以下是您可以使用的两个基本循环:

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

要静态访问 tem,您可以这样做:

$firstMake = $mmy[0][0]; //meaning first row first column
$secondMake = $mmy[1][0];
$thirdYear = $mmy[2][2];

我希望这能清除一点。

于 2013-03-20T13:21:46.973 回答
0

您可以使用数组迭代器:

<?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();
}

?>

注意countfor 内部循环的使用,这确保循环只会回显在数组中定义的值(因此如果缺少一个值,则不会出现未定义的索引错误)。

于 2013-03-20T13:33:08.107 回答
0

这基本上意味着数组中的偏移量 [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>';
   }
}
于 2013-03-20T13:10:08.387 回答