【问题标题】:PHP: using more than one array in a loopPHP:在循环中使用多个数组
【发布时间】:2016-10-10 19:52:31
【问题描述】:

我试图在@foreach 中使用多个数组。在查看 SO 之后,我发现这不是 @foreach 的用途,那么在以下场景中我应该使用什么?这是我在将网站交给后端开发人员之前用来模拟网站的虚假数据。我正在使用 Laravel 并且是 PHP 的初学者,所以我听你的摆布。

数组

$messageData['conversation_sender'][0][0] = 'Clint Smith';
$messageData['conversation_sender'][0][1] = 'Tom Corwin';
$messageData['conversation_sender'][0][2] = 'John Michaels';
$messageData['conversation_sender'][0][3] = 'Jane Winnipeg';
$messageData['conversation_class'][0][0] = 'owner-comment';
$messageData['conversation_class'][0][1] = 'friend-comment';
$messageData['conversation_class'][0][2] = 'friend-comment';
$messageData['conversation_class'][0][3] = 'friend-comment';
$messageData['conversation_message'][0][0] = 'Hello!';
$messageData['conversation_message'][0][1] = 'Can\t wait to catch up';
$messageData['conversation_message'][0][2] = 'Whoop, whoop';
$messageData['conversation_message'][0][3] = 'Good times!';
$messageData['conversation_time'][0][0] = '2 minutes ago';
$messageData['conversation_time'][0][1] = '4 minutes ago';
$messageData['conversation_time'][0][2] = '8 minutes ago';
$messageData['conversation_time'][0][3] = '18 minutes ago';

我一直在使用的@foreach 循环示例,一次一个数组

@foreach($messageData['conversation_sender'][0] as $value)
    <span class="form-tag">{{ $value }} <i class="fa fa-plus"></i></span> 
@endforeach

我想如何使用它(我知道我在做梦)

@for($messageData['conversation_sender'][0] as $sender, $messageData['conversation_class'][0] as $class, $messageData['conversation_message'][0] as $message, $messageData['conversation_time'][0] as $time)
    <li class="{{ $class }} clearfix">
        <p class="text-left">
          <strong>{{ $sender }}</strong><br>
          {{ $message }}
        </p>
        <span class="message-created text-muted">{{ $time }}</span>
    </li>
@endfor

第一次迭代应打印的示例

<li class="owner-comment clearfix">
    <p class="text-left">
      <strong>Clint Smith</strong><br>
      Hello!
    </p>
    <span class="message-created text-muted">2 minutes ago</span>
</li>

【问题讨论】:

  • 看起来你可以只使用一个循环\数组中的键来从其他数组中提取数据。
  • 你的例子..克林特史密斯没有说“你好!”不是“迫不及待想要赶上”
  • 为什么在所有内容之前都有@?在 PHP 中,@ 用于抑制错误消息。
  • @Dagon 不错 :)
  • @Barmar 我正在使用 Laravel,我真的不知道为什么,PHP 对我来说是黑魔法。

标签: php laravel for-loop


【解决方案1】:

将您的数组重组为应有的样子:分层。

$messageData[] = array(
   'conversation_sender' => 'Clint Smith',
   'conversation_class' => 'owner-comment',
   'conversation_message' => 'Hello!',
   'conversation_time' => '2 minutes ago'
);
// Repeat for each other message.

现在您有了您想要的,它适用于您的数组中可能存在的任意数量的消息:

foreach ($messageData as $message) {
    echo "Sender {$message['conversation_sender']} </br>";
    // etc.
}

【讨论】:

  • 目前的格式没有什么特别不好的地方,很容易按原样使用。
  • @Dagon,完全取决于数据。我的回答是基于问题清楚地表明这是模拟数据这一事实。
  • 由此可以推测,这是一个基于消息的系统,而不是基于发送者、消息和时间的单个子数组。根据 Barmar 的回答,可以很容易地根据相同的数字索引来定位与同一消息关联的其他条目,但有时可以跳到我认为有用的结论,这就是其中之一有时我的假设是数据的结构尚未确定,并且这里真正需要的是像记录数组这样的消息数组。
【解决方案2】:

您可以使用 foreach 循环。

    @foreach($messageData['conversation_sender'][0] as $key=>$sender)
{{--*/ $class=$messageData['conversation_class'][0][$key];
    $message = $messageData['conversation_message'][0][$key];
    $time = $messageData['conversation_time'][0][$key]; /*--}}
    //Your code here
@endforeach

或者直接用php

    foreach($messageData['conversation_sender'][0] as $key=>$sender){
    $class=$messageData['conversation_class'][0][$key];
    $message = $messageData['conversation_message'][0][$key];
    $time = $messageData['conversation_time'][0][$key]; 

    //your code here

}

【讨论】:

  • 嗨,为什么从第二行开始的代码在第一个 foreach 中被注释掉了?谢谢
  • 已编辑。 @Clinton 这是用于在 Blade 模板中分配变量的技巧,或者您可以将 {{--*/ 替换为 &lt;?php 并将 /*--}} 替换为 ?&gt;
  • 魔术 :) 感谢您的解释
  • @ClintonGreen 应该接受 Barmer 的,半小时前发布的相同内容
  • @Dagon 我尝试了所有答案,Barmars 非常相似,但在我的代码中不起作用。可能是因为变量没有包含在
【解决方案3】:

对一个数组使用foreach,在其他数组中使用相同的键。

foreach ($messageData['conversation_sender'][0] as $index => $sender) {
    $class = $messageData['conversation_class'][0][$index];
    $time = $messageData['conversation_time'][0][$index];
    $message = $messageData['conversation_time][0][$index];
    // do stuff with those variables
}

但是,更惯用的方法是 gview 的回答。

【讨论】:

    猜你喜欢
    • 2010-12-05
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    相关资源
    最近更新 更多