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

これは基本的に、配列内のオフセット[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 に答える
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]存在しないものにアクセスしようとします。次のループでも同じエラーが発生します。

ループを相互に配置して、インデックスが配列の長さよりも大きくなることはありませんが、多次元ルックアップを使用しようとしているため、配列アクセスを変更する必要がありますが、配列は2次元のみです。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タグが生成されます。

ここで必要な内部ループは1つだけです。外側のループは$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

使用できる2つの基本的なループは次のとおりです。

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ループを使用してください。

あなたの例では、次のような2次元配列があります。

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

?>

内側のループの使用に注意してくださいcount。これにより、ループは配列内で定義された値のみをエコーアウトします(したがって、1つの値が欠落している場合でも未定義のインデックスエラーは発生しません)。

于 2013-03-20T13:33:08.107 に答える