无法找到未定义索引背后的错误

时间:2013-10-02 20:48:31

标签: php

我有以下代码,并且我一直得到未定义的索引错误,代码在test5()上失败但我无法找到错误。

<?php
function test1() {
$vars = [0, 1, 2, 4, 3];
for ($i = 0; $i < count($vars); $i++) {
    print $vars[$i] . "\n";
}
} 

function test2() {
$flavors = ['vanilla', 'pistachio', 'banana', 'caramel', 'strawberry'];
$favorite = 'banana';
foreach ($flavors as $key => $flavor) {
    if ($flavor === $favorite) {
        print $key . "\n";
        break;
    }
}
}

function test3() {
$stuff = ['shoes', 33, null, false, true];
$selected = 0;
foreach ($stuff as $key => $thing) {
    if ($thing == $selected) {
        print $key . "\n";
        break;
    }
}
}

function test4() {
$four = 4;
$five = test4_helper($four);
print "four: $four\n";
print "five: $five\n";
}

function test4_helper(&$arg) {
$return = $arg++;
return $return;
}

function test5() {

$products = [
    'Trek Fuel EX 8' => [
                                            'price' => 2000, 
                                            'quantity' => 1
                                            ],
    'Trek Remedy 9' => [
                                            'price' => 2600, 
                                            'quantity' => 2
                                             ],
    'Trek Scratch 8' => [
                                            'price' => 3500,    
                                            'quantity' => 1
                                            ]
];
$total = 0;

$callback = function ($product, $name) {
            //$total = 0;
            $tax = 1.2;
            $price = $product[$name]['price'];
            $total += ($price * $product[$name]['quantity']) * $tax;
           return $total;
        };

array_walk($products, $callback);

print "$total\n";
}

/* * **********************************

 * *** DO NOT EDIT BELOW THIS LINE ****

 * *********************************** */

$tests = 5;
for ($i = 1; $i <= $tests; $i++) {
$function = "test$i";
print "\n\n==== Test $i ====\n";
$function();
print "==== END of test $i ====\n <br>";
}

这段代码有什么问题? 它看起来在测试5上失败了

2 个答案:

答案 0 :(得分:0)

PHP闭包与JavaScript不同,因为它们不会继承父作用域。您需要通过use构造传入任何依赖项。在你的例子中......

$callback = function ($product, $name) use ($total) {
    // etc

请参阅http://php.net/manual/functions.anonymous.php#example-166

答案 1 :(得分:-1)

PHP中的数组定义如下:

$products = array(
    'Trek Fuel EX 8' => array(
                          'price' => 2000, 
                          'quantity' => 1
                          ),
    'Trek Remedy 9' => array(
                         'price' => 2600, 
                         'quantity' => 2
                         ),
    'Trek Scratch 8' => array(
                         'price' => 3500,    
                         'quantity' => 1
                         )
);

这意味着您还需要查看$vars = [0, 1, 2, 4, 3];$flavors = ['vanilla', 'pistachio', 'banana', 'caramel', 'strawberry'];并修复它们。