Array_push 推送空值

Array_push pushing empty values

我正在尝试将数据推送到 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 StarkJon Snow 等,当它们消失时推送到数组。

编辑 2 为上面的示例代码添加了更多上下文。

编辑 3 解决方案

谢谢@misorude

我只需要转换我的 xml name 元素就可以了。 $winners_1[] = (string)$v->name;

编辑 你只需要像这样定义 winners 数组 $winners_1 = array();不是 $winners_1 = [];//这用于 javascript 我想我是新人。

我测试了这个,它在这里工作正常。 试试这个,

$winners_1 = array();
foreach($xml->Winner as $v) {

  $out->writeln($v); //when logging here every value gets logged correctly
  $winners_1[] = $v;
}
$out->writeln($winners_1);

这里的问题并不是真正将元素添加到数组中,而是 实际上添加了什么 - 以及稍后如何处理/解释它。

SimpleXML 就是您传统上所说的“善变的情妇”。通常 SimpleXMLElement 实例在某些上下文中表现得像字符串 - 但在稍微不同的上下文中则不然。

我没有去查看 Symfony 的 ConsoleOutput 的内部工作原理,但是它如何从输入对象创建输出可能在这里发挥了作用。

Casper 将它们转换为字符串的建议是个好主意 - 如果您以后不再需要 SimpleXMLElement 对象提供的任何属性/方法,而您只需要它们包含的“数据” - 然后将它们转换为尽快是避免进一步麻烦的好方法。

这里不能直接将 $v 转换为字符串 - 因为 Winner 元素不直接包含文本,而是包含在额外的 name 元素中。将包含其他元素的 SimpleXMLElement 强制转换为字符串只会再次导致空字符串。

因此需要访问 name 元素本身并将其转换为字符串 - (string) $v->name

我认为您正在尝试将 SimpleXMLElements 元素添加到数组中。如果要添加字符串值,则必须将 SimpleXMLElement 转换为字符串。下面我尝试根据上述讨论重现您的问题。

$myXMLData = "<?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>";

基于 PHP 文档 xml 到数组 https://www.php.net/manual/en/book.simplexml.php

$xml = simplexml_load_string($myXMLData);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

然后循环,

$winners_1 = [];
foreach($array['Winner'] as $v) {
  array_push($winners_1, $v['name']);
}

print_r($winners_1);

答案:

Array ( [0] => Robb Stark [1] => Jon Snow [2] => Aria Stark [3] => Theon Greyjoy )