简体   繁体   English

循环多维数组Laravel

[英]Loop multidimensional array Laravel

Im having trouble looping an array in my laravel 5.5 blade 我在laravel 5.5刀片中循环数组时遇到问题

1.- In my controller Im querying a dynamodb and I'm returning $arrayRet 1.-在我的控制器中,我查询一个dynamodb,然后返回$ arrayRet

 $result =$dynamodb->query(array(
            'TableName' => 'sigfox',
            'KeyConditionExpression' => 'deviceid = :v_hash',
            'ExpressionAttributeValues' =>  array (
                ':v_hash'  => array('S' => '3E6231')
            )
        ));

        //echo "Query succeeded.\n";
        $arrayRet['signals'] = $result['Items'];
  return view('loggers.index', $arrayRet);

2.-In my blade I have the following code 2.-在我的刀片中,我有以下代码

 @foreach($signals as $signal)
        <tr>
            <td>{{$signal['payload']['M']['data']['S']}}</td>  
        </tr>
 @endforeach

3.- I get Undefined index: data --- So I've dd($signal) and this is the result 3.-我得到了未定义的索引:数据---所以我有dd($ signal),这就是结果

array:3 [▼
"payload" => array:1 [▼
      "M" => array:10 [▼
  "avgSnr" => array:1 [▶]
  "rssi" => array:1 [▶]
  "data" => array:1 [▼
    "S" => "33333b414900"
  ]
  "lng" => array:1 [▶]
  "snr" => array:1 [▶]
  "station" => array:1 [▶]
  "seqNumber" => array:1 [▶]
  "time" => array:1 [▶]
  "device" => array:1 [▶]
  "lat" => array:1 [▶]
   ]
   ]
"deviceid" => array:1 [▶]
"timestamp" => array:1 [▶]
]

4.- I also tried getting the value hardcoding the position and It works. 4.-我还尝试过将值硬编码在位置上,并且它可以工作。 But I have to use the "blade way" with @foreach 但是我必须在@foreach中使用“刀片方式”

       <tr>
            <td>{{$signals[0]['deviceid']['S']}}</td>
            <td>{{$signals[0]['timestamp']['S']}}</td>
            <td>{{$signals[0]['payload']['M']['avgSnr']['S']}}</td>
            <td>{{$signals[0]['payload']['M']['snr']['S']}}</td>
            <td>{{$signals[0]['payload']['M']['lat']['S']}}</td>
            <td>{{$signals[0]['payload']['M']['lng']['S']}}</td>
        </tr>

5.- Maybe I'm missing something please advise 5.-也许我想念一些东西,请指教

If you are using PHP 7 null coalescing operator can be very useful here! 如果您使用的是PHP 7,则null合并运算符在这里非常有用!

@foreach(signals as signal)
   <tr>
        <td>{{ $signal['deviceid']['S'] ?? 'N/A' }}</td>
        <td>{{ $signal['timestamp']['S'] ?? 'N/A' }}</td>
        <td>{{ $signal['payload']['M']['avgSnr']['S'] ?? 'N/A' }}</td>
        <td>{{ $signal['payload']['M']['snr']['S'] ?? 'N/A' }}</td>
        <td>{{ $signal['payload']['M']['lat']['S'] ?? 'N/A' }}</td>
        <td>{{ $signal['payload']['M']['lng']['S'] ?? 'N/A' }}</td>
    </tr>
@endforeach

If the index doesn't exist, it will print "N/A" as a default value. 如果索引不存在,它将打印“ N / A”作为默认值。

There can be more improvement! 会有更多的改善! Create a model to clean up these indexes and everything before sending the view and the code will look something like this. 在发送视图之前,创建一个模型来清理这些索引和所有内容,代码将如下所示。 In your controller, process this data before sending it to view. 在您的控制器中,先处理这些数据,然后再发送给查看。 The function like array_map can be useful here. array_map这样的函数在这里可能会有用。 Logic staff should be done out of the views as much as possible. 逻辑人员应尽可能地脱离观点。 Your code will look much neater. 您的代码看起来更加整洁。

@foreach(signals as signal)
   <tr>
        <td>{{ $signal['deviceid'] }}</td>
        <td>{{ $signal['timestamp'] }}</td>
        <td>{{ $signal['avgSnr'] }}</td>
        <td>{{ $signal['snr'] }}</td>
        <td>{{ $signal['lat'] }}</td>
        <td>{{ $signal['lng'] }}</td>
    </tr>
@endforeach

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM