gpt4 book ai didi

使用 CachingIterator 的 PHP 数组到字符串的转换通知

转载 作者:行者123 更新时间:2023-12-02 17:09:33 25 4
gpt4 key购买 nike

我已经就此主题在 Stackoverflow 上进行了一些搜索,但据我所知,我没有将数组视为字符串?

我收到的消息是:

Array to string conversion in X on line 42

我的代码的第 42 行是 foreach 循环的开头:

foreach ($collection as $element) {

变量 $collection 是一个基于数据库输出的缓存迭代器:

$collection=new\CachingIterator(new\ArrayIterator($this->dbData));

如果我在 $this->dbDataprint_r(),我肯定会得到一个数组:

Array
(
[0] => Array
(
[c_id] => A
)

[1] => Array
(
[c_id] => B
)

所以,总结一下:

  • 我们有一个数组的确认输出
  • 我们知道 ArrayIterator() 需要一个 array 作为参数
  • 我们知道 CachingIterator() 需要一个 Iterator 作为参数
  • 我们知道 foreach() 可以遍历 Iterator

TL;DR 我真的不确定我在这里将什么视为字符串?

编辑添加....

即使我大大简化了我的代码,我仍然可以重现:

<?php
error_reporting (E_ALL | E_STRICT);
ini_set ('display_errors', 1);
$arrX=array(array("c_id"=>"A"),array("c_id"=>"B"));
$collection=new \CachingIterator(new \ArrayIterator($arrX));
foreach($collection as $element) {
echo $element["c_id"].PHP_EOL;
}

Notice: Array to string conversion in /Users/bp/tmp/test.php on line 6

A

Notice: Array to string conversion in /Users/bp/tmp/test.php on line 6

B

最佳答案

简短的回答是,您无意中要求 CachingIterator 在迭代期间将子数组转换为字符串。要不这样做,请不要使用 CachingIterator::CALL_TOSTRINGCachingIterator::TOSTRING_USE_INNER 标志。

您可以不设置标志,方法是使用 0 作为 $flags 参数的值,或者使用不同的标志:这可以在构造函数中完成,或者使用 CachingIterator::setFlags() 初始化后。

例如:

$array = [["c_id" => "A"], ["c_id" => "B"]];
$collection = new CachingIterator(new ArrayIterator($array), 0);
foreach ($collection as $element) {
// no E_NOTICE messages, yay!
}

还有一些解释......

默认情况下,CachingIterator 类设置 CachingIterator::CALL_TOSTRING 标志,如 PHP manual page on CachingIterator 中所述.

public __construct ( Iterator $iterator [, int $flags = self::CALL_TOSTRING ] )

当设置此标志(或 CachingIterator::TOSTRING_USE_INNER 标志)时,调用 CachingIterator::next() 方法(即在迭代期间)当前值(在本例中为每个子数组)或内部迭代器(在本例中为 ArrayIterator)分别转换为字符串并在内部保存。当使用其中一个标志时,此字符串值是从 CachingIterator::__toString() 返回的值。

当使用任何其他标志时,调用 CachingIterator::next() 时不会完成上述操作。

关于使用 CachingIterator 的 PHP 数组到字符串的转换通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49927608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com