如何使用每个数组的第一项

时间:2019-04-14 17:28:56

标签: php laravel-5.7

我正在使用Laravel 5.7开发项目

我有两个数组

我要查看表的此数组

array(['branch','report','product','cost']);

array( 
[
       'branch' =>
          [
            'branch.add',
            'branch.delete, 
          ]
       'report' =>
          [
            'report.create',
            'report.list,  
          ]
       'product' =>
          [
            'product.add',
            'product.sell'
          ]
       'cost' =>
          [
            'cost.add',
            'cost.list
          ]
]
)

我希望桌子看起来像这样

<table>
   <thead>
      <th>Branch</th>
      <th>Report</th>
      <th>Product</th>
      <th>Cost</th>
   </thead>
   <tbody>
     <tr>
        <td>branch.add</td>
        <td>report.create</td>
        <td>product.add</td>
        <td>cost.add</td>
     </tr>
     <tr>
        <td>branch.delete</td>
        <td>report.list</td>
        <td>product.list</td>
        <td>cost.list</td>
     </tr>
   </tbody>
</table>

我尝试了很多,但是无法编写正确的foreach循环。

第一次尝试

<table>
    <thead>
    <tr>
        @foreach($delegateGroup as $group)
            <th>{{$group}}</th>
        @endforeach
    </tr>
    </thead>
    <tbody>
        @foreach($delegateType as $delegate)
                @foreach($delegate as $v)
                    <tr>
                        <td>{{$v}}</td>
                    </tr>
                @endforeach
        @endforeach
    </tbody>
</table>

第一个数组中的第二个数组正确无误,但其他数组错误

我在做什么错

3 个答案:

答案 0 :(得分:0)

可以尝试一下吗。 希望它能起作用

camera.position.x = camera.position.x + 100;

答案 1 :(得分:0)

在您发表评论后,我意识到我没有正确阅读您的问题-致歉。

我认为一个简单的解决方案是为用户array_column https://www.php.net/manual/en/function.array-column.php

然后您可以说:

$tableheadings = array(['branch','report','product','cost'])[0];
$tableData = array( 
  [
    'branch' =>['branch.add','branch.delete'],
    'report' =>['report.create','report.list'],
    'product' =>['product.add','product.sell'],
    'cost' =>['cost.add','cost.list']
  ]
);

$table = '<thead>' . 
            implode('',array_map(function($th){return '<th>' . $th . '</th>';},$tableheadings)) 
         . '</thead>';


for($i = 0;$i < sizeof($tableData[0]); $i++) {
      $row = array_map(function($td){return '<td>' . $td . '</td>';},array_column($tableData[0],$i));
      if(sizeof($row) == 0) continue;
        $table .= '<tr>' .implode('',$row)  . '</tr>';
}

    echo '<table>' . $table . '</table>';

我已经在phpfiddle上进行了测试,它可以提供您想要的结果,如果您可以以更好的格式获取数据,则可以使其更简单(我不确定从哪里获取数据)

答案 2 :(得分:0)

我做到了

感谢@ jameson2012的想法

找到最长的数组

$rowCount = 0;
array_walk($delegateType, function ($items) use (&$rowCount) {
            $count = count($items);
            if ($count > $rowCount)
                $rowCount = $count;
        });

$ delegateType回显索引后

以及每个数组的第一个值echo

<table>
    <thead>
    <tr>
        @foreach(array_keys($delegateType) as $group)
            <th>
                @if(isset($group))
                    $group
                @endif
            </th>
        @endforeach
    </tr>
    </thead>
    <tbody>
        @for ($i = 0; $i < $rowCount; $i++)
            <tr>
            @foreach($delegateType as $group => $values)
                <td>
                    @if(isset($values[$i]))
                          {{$values[$i]}}
                    @endif
                </td>
            @endforeach
            </tr>
        @endfor    
    </tbody>