循环多维数组 Laravel

Posted

技术标签:

【中文标题】循环多维数组 Laravel【英文标题】:Loop multidimensional array Laravel 【发布时间】:2018-07-30 07:54:36 【问题描述】:

我无法在我的 laravel 5.5 刀片中循环数组

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.-在我的刀片中,我有以下代码

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

3.- 我得到 Undefined index: data --- 所以我有 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.- 我还尝试获取硬编码位置的值并且它有效。但我必须使用 @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.- 也许我遗漏了什么,请指教

【问题讨论】:

数组中有 3 项,是否有可能第一项具有所有索引但没有第二项或第三项? 我不确定表是如何创建的,但是有可能。实际上,如果我在刀片中执行 $signal['payload']['M']。它告诉我需要一个字符串,但给出了一个数组,这是有道理的。 如图所示,某些行的结构可能不一致。你需要关心的是当目标结构丢失时你将如何处理。请告诉我你所做的事情的目的和你想要的输出,以便我可以建议你适当的解决方案。 另外,在您的硬编码中,您没有更改$signals 索引。结果,它可能不会移动到下一行然后出错。 是的。 php 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS ) 版权所有 (c) 1997-2017 PHP Group Zend Engine v3.0.0,版权所有 (c) 1998-2017 Zend Technologies with Zend OPcache v7.0.22-0ubuntu0。 16.04.1,版权所有 (c) 1999-2017,由 Zend Technologies 提供 【参考方案1】:

如果您使用的是 PHP 7,null coalescing operator 在这里会非常有用!

@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

如果索引不存在,它将打印“N/A”作为默认值。

还有更多的改进!在发送视图之前创建一个模型来清理这些索引和所有内容,代码看起来像这样。在您的控制器中,在将其发送到视图之前处理此数据。 array_map 之类的函数在这里很有用。逻辑人员应该尽可能地做出来的意见。您的代码会看起来更整洁。

@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

【讨论】:

谢谢。我将在模型上工作。我将尝试不同的数组,而不是默认的 DynamoDB Json 格式。

以上是关于循环多维数组 Laravel的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 无法使用刀片从多维数组中获取值

使用 Laravel 和 ajax 保存多维数组

如何在 Laravel 测试中发布多维数组?

Laravel 多维数组不计算结果

在 laravel 中导出 excel 或 csv 中的多维数组

Laravel:将多维数组从视图发送到控制器?