php – 尝试使用刀片获取foreach循环中的密钥
发布时间:2020-12-13 22:41:19 所属栏目:PHP教程 来源:网络整理
导读:如果我使用{{$node [0] – url}},那么Laravel的模板引擎会显示正确的结果,但我无法弄清楚如何在@foreach循环中使用@for $i = 0显示所有内容这是什么我有我的路线文件 $oReturn = new stdClass(); $fid='endpoints';//sample fid $url = 'http://localhost:54
如果我使用{{$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
简单的答案是,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 ]; // 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 (字符串)将$node-> url的结果转换为字符串.否则PHP可能会将其视为某种对象. SimpleXMLElement可能很奇怪. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |