【发布时间】:2019-08-30 09:19:56
【问题描述】:
我正在尝试将数据推送到 foreach 循环内的数组。空值被推入数组。
我尝试注销这些值以查看它们是否为空但它们在那里,只有在推送到数组时它们才会丢失。我还尝试将值分配给另一个变量并且效果很好。
$winners = \App\Winner::where('gameid', 577)->pluck('prizes_web_1');
$xml = simplexml_load_string(stripslashes($winners));
$winners_1 = [];
foreach($xml->Winner as $v) {
$out->writeln($v); //when logging here every value gets logged correctly
array_push($winners_1, $v);
}
$out->writeln($winners_1); //here an array with 4 empty values gets logged
我尝试将数组声明为array(),但问题仍然存在。尝试像winners_1[] = $v 那样分配值,但一切都保持不变。也尝试使用strval($v),但这也无济于事
我不知道是什么导致了这个问题,我在推送到数组时从来没有遇到过这样的事情。
编辑 这是一个xml的例子:
<?xml version='1.0' encoding='UTF-8'?>
<Winners>
<Winner><name>Robb Stark</name></Winner>
<Winner><name>Jon Snow</name></Winner>
<Winner><name>Aria Stark</name></Winner>
<Winner><name>Theon Greyjoy</name></Winner>
</Winners>
$log->writeln() 行也将内容记录到控制台,当记录 $v 时,我可以看到记录的值 Robb Stark、Jon Snow 等,它们在推送到阵列时消失。
编辑 2 为上面的示例代码添加了更多上下文。
编辑 3 解决方案
谢谢@misorude
我只需要转换我的 xml name 元素就可以了。
$winners_1[] = (string)$v->name;
【问题讨论】:
-
请提供xml样本。
-
以及您的代码对该 XML 的作用的示例,以及您实际希望代码生成的结果的描述和示例
-
很难说
$out->writeln代表什么。您可能应该使用var_dump进行调试并检查输出并更新问题。 -
健全性检查 没有理由相信
array_push()只是在找你。然而,有更多的理由假设像$out->writeln()这样的未知函数可能会弄乱它被要求输出的数据。请用您/我们可以信任的东西替换它们,例如var_dump() -
是的,刚刚意识到这一点。您在此处循环遍历
Winner元素,但您在这些元素中附加了一个name- 因此您不能将 Winner SimpleXMLElement 实例直接转换为字符串,但您需要显式转换 name 元素:(string) $v->name
标签: php arrays array-push