尝试在 foreach 循环中获取密钥以使用刀片工作
Posted
技术标签:
【中文标题】尝试在 foreach 循环中获取密钥以使用刀片工作【英文标题】:Trying to get key in a foreach loop to work using blade 【发布时间】:2016-02-12 00:49:19 【问题描述】:如果我使用$node[0]->url
,那么 Laravel 的模板引擎会显示正确的结果,但我无法弄清楚如何在 @foreach 循环中使用 @for $i=0 显示所有内容,这就是我在路由文件中的内容
$oReturn = new stdClass();
$fid='endpoints';//sample fid
$url = 'http://localhost:5493/sdata/$system/registry/'.$fid;
$xml = simplexml_load_file($url);
foreach($xml->xpath("//sdata:payload") as $entry)
// xpath here must be from payload to endPoint--type
$content = $entry->xpath("./sdata:endPoint--type");
foreach($content as $c)
// Make set of children with prefix sdata
$nodes = $c->children('sdata', true);
// add parsed data to the array
$oReturn->entry[] = $nodes;
return View::make('index', compact('oReturn'));
这是我在视图文件中尝试过的
@for($i=0; $i < 4; $i++)
@endfor
@foreach ($oReturn as $node)
<li>$node[$i]->url</li>
@endforeach
抱歉,这里是完整的 print_r 结果
Array ( [oReturn] => stdClass Object
( [entry] => Array
(
[0] => SimpleXMLElement Object ( [description] => Sage 50 Accounts [protocol] => http [host] => base_3 [applicationName] => accounts50 [contractName] => SimpleXMLElement Object ( ) [dataSetName] => - [url] => http://base_3:5493/sdata/accounts50 [isBrowsable] => true [aliveStamp] => 2015-11-06T23:31:10.031+00:00 )
[1] => SimpleXMLElement Object ( [endPointType] => dataSet [applicationName] => accounts50 [contractName] => GCRM [dataSetName] => Enter Your Company Name [url] => http://base_3:5493/sdata/accounts50/GCRM/C22ACA13-3C4C-4E33-A584-CD99BD3002A6 )
[2] => SimpleXMLElement Object ( [endPointType] => dataSet [applicationName] => accounts50 [contractName] => GCRM [dataSetName] => Enter Your Company Name [url] => http://base_3:5493/sdata/accounts50/GCRM/FF476636-D4AF-4191-BDE4-891EDA349A68 )
[3] => SimpleXMLElement Object ( [endPointType] => dataSet [applicationName] => accounts50 [contractName] => GCRM [dataSetName] => Enter Your Company Name [url] => http://base_3:5493/sdata/accounts50/GCRM/C62A13D5-3FFE-43B4-9DAF-38F9055A83C7 )
[4] => SimpleXMLElement Object ( [description] => GCRM Contract [endPointType] => contract [protocol] => http [host] => base_3 [applicationName] => accounts50 [contractName] => GCRM [dataSetName] => - [url] => http://base_3:5493/sdata/accounts50/GCRM [aliveStamp] => 2015-11-06T23:31:11.062+00:00 )
)
)
) 1
【问题讨论】:
【参考方案1】:简单的答案是 Blade 中的 foreach
与普通 php foreach
的工作方式相同。您应该能够执行以下操作:
@foreach ($nodes as $node)
<li> $node->url </li>
@endforeach
如果需要访问每个节点的数组键值:
@foreach ($nodes as $key => $node)
<li> $key : $node->url </li>
@endforeach
但是,我认为问题可能不在于您的 Blade 语法,而在于您创建输入变量的方式。鉴于您在上面的代码中创建 $oReturn
的方式,它不会具有您所期望的属性。为了说明,这是您似乎正在创建的简化版本:
// initialize your return variable
$oReturn = new stdClass();
// create a dummy array <sdata:x> nodes,
// to simulate $nodes = $c->children('sdata', true);
$node = new SimpleXMLElement('<sdata:x/>');
$nodes = [ $node, $node, $node ];
// simulate adding nodes to the array of entries
$oReturn->entry[] = [ $node, $node, $node ];
// print out the resulting structure
print_r( compact( 'oReturn' ) );
会返回:
Array(
[oReturn] => stdClass Object
(
[entry] => Array
(
[0] => Array
(
[0] => SimpleXMLElement Object()
[1] => SimpleXMLElement Object()
[2] => SimpleXMLElement Object()
)
)
)
)
因此,当您执行@foreach ($oReturn as $node)
时,$node
的值将是 entry[]
数组,它有一个元素,即节点数组。从您的输入中不清楚这些节点甚至有 url
元素。如果您确实想遍历节点,则必须执行以下操作:
@foreach ($oReturn->entry[0] as $node)
<li> $node->url </li>
@endforeach
这有意义吗?我认为您需要重新考虑创建$oReturn
。
更新
鉴于下面的反馈和上面的print_r
语句的输出,以下应该可以工作:
@foreach ($oReturn->entry as $node)
<li> (string) $node->url </li>
@endforeach
(string)
将$node->url
的结果转换为字符串。否则 PHP 可能会将其视为某种对象。 SimpleXMLElement
可能很奇怪。
【讨论】:
你的权利这就是我得到的"[0] => SimpleXMLElement Object ([description] => Sage 50 Accounts [protocol] => http [host] => base_3 [applicationName] => accounts50 [contractName] => SimpleXMLElement Object () [dataSetName] => - [url] => base_3:5493/sdata/accounts50 [isBrowsable] => true [aliveStamp] => 2015-11-06T23:31:10.031+00:00)”和我有 4 个我试图在视图中显示 [url] 段 你能建议如何解决这个问题,因为我尝试了几种方法,当我尝试将结果传递给我知道我做错了什么的视图时,所有这些方法都失败了,但是什么? 您如何在 Form::select 中使用上述代码将 url 作为选项提供以上是关于尝试在 foreach 循环中获取密钥以使用刀片工作的主要内容,如果未能解决你的问题,请参考以下文章
如何在刀片模板的 foreach 循环中访问 laravel 集合?
在刀片 laravel 中多次防止 foreach 循环 html 标记
在刀片 foreach 循环中使用 JS 动态更改 div CSS 背景