4

希望有人可以帮助我确定如何从这个示例脚本中初始化这个变量 ($value),我从 Vikram Vaswani 的 PHP 初学者指南中复制了这个示例脚本。

我在 php.ini 中打开了 display_erors 值,它在浏览器中返回了这个错误。

注意:未定义变量:C:\BitNami\wordpress-3.6-0\apache2\htdocs\associative-array.php 中第 23 行的城市

警告:第 23 行 C:\BitNami\wordpress-3.6-0\apache2\htdocs\associative-array.php 中为 foreach() 提供的参数无效

这是我从本书第 94 页复制的代码

<?php

// define array

$citites = array(

"United Kingdom" => "London",

"United States" => "Washington DC",

"France" => "Paris",

"India" => "Delhi" 

);

// Iterate over the associative array
// and print each value
// this example as supplied in the book
// returns uninitialized error for either $key or $value on line 20


foreach ($cities as $key => $value) {

 echo "$value is in $key. \r\n";

  }

?> 

同样在同一章中复制了另一个示例,因为“数组迭代器”只是无限期地挂在浏览器中。到目前为止,书中的所有示例似乎都运行良好。

这是从书中复制的数组迭代器示例的代码。任何人都知道为什么这会无限期挂起并且不向浏览器显示输出。非常感谢您的帮助。

<?php

// define associative array (hash)

$cities = array(

"United States" => "Washington",

"United Kingdom" => "London",

"France" => "Paris",

"Spain" => "Madrid",

"Italy" => "Rome"

);

// Create an array itterator object

$iterator = new ArrayIterator($cities);

// rewind to beginning of array

$iterator->rewind();

// iterate over the array
// print each value

while ($iterator->valid()) {

    print $iterator->current() . " is in " . $iterator->key() . ". \r\n";

$iterator->next;

 }

?> 
4

4 回答 4

2

更改$iterator->next$iterator->next()最后一行附近。

$iterator->next不起作用,因为 PHP 假定您正在访问字段而不是调用方法。调用方法需要括号()

于 2013-08-25T18:44:43.537 回答
1

在第一个示例中,错误在这一行:

$citites = array(

您在这里拼错了“城市”,这打破了 foreach 循环。

在第二个示例中,只需更改$iterator->next$iterator->next(). 这将告诉 PHP 它是一个方法而不是一个字段,从而可以正确调用它。

于 2013-08-25T19:15:56.310 回答
1

我想$iterator->next你的意思是调用一个函数,而不是尝试访问名为的类ArrayIterator( $iterator)的变量next

为了调用一个函数,您需要在函数名之后附加一组括号,即function_name(),如果需要,可以带或不带一系列参数。

因此,$iterator->next您应该使用$iterator->next().

于 2013-08-25T18:45:16.483 回答
0

你正试图访问一个方法,所以你应该用第一个括号来关闭它。你应该使用 $iterator->next() 而不是 $iterator->next。

于 2013-08-25T18:59:39.437 回答