【问题标题】:Best way to compare key and value of array(s) in Laravel在 Laravel 中比较数组的键和值的最佳方法
【发布时间】:2017-08-15 17:16:07
【问题描述】:

目前我有两个数组,如下图所示。比较它们的最佳方法是什么?要么将它们组合在一起并在一个数组中进行比较,要么按照我的方式进行比较?

$array1

$array2

这是我用来比较它们的方法

<table>
<thead><tr><td>status</td></tr></thead>

<tbody>
    <tr>
        <td>
            foreach($array1 as $key => $value)
            {
                foreach($array2 as $ke2 => $value2)
                {
                    if($value[0] == $value2[0] && 
                        $value[1] == $value2[1] && 
                        $value[2] == $value2[2])
                        YES
                    else
                        NO
                }
            }
        </td>
    <tr>
</tbody>
</table>

更新

<table>
<thead><tr><td>status</td></tr></thead>

<tbody>
    <tr>
        <td>
            @foreach ($array1 as $key => $value)
              @if (isset($array2[$key]) && $value == $array2[$key])
                Yes
              @else
                No
              @endif
            @endforeach
        </td>
    <tr>
</tbody>
</table>

但是这个在表格中的显示是这样的

状态

没有是的

没有是的

没有是的

假设是

状态

没有

是的

是的

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    等价性适用于数组,因此您可以消除内部 foreach 循环

    foreach ($array1 as $key => $value) {
        echo isset($array2[$key]) && $value == $array2[$key] ? 'YES' : 'NO';
    }
    

    您还可以使用=== 进行类型安全比较以及键的顺序很重要的地方。另见:Compare multidimensional arrays in PHP

    如果您正在寻找如何输出到模板中,Blade 有自己的循环和条件语法。

    @foreach ($array1 as $key => $value)
        @if (isset($array2[$key]) && $value == $array2[$key])
            Yes
        @else
            No
        @endif
    @endforeach
    

    有关 Blade 模板语法的更多信息,请查看文档页面:https://laravel.com/docs/5.4/blade#loops

    【讨论】:

    • 我如何把它放在 laravel 刀片视图中?它只是显示代码
    • 我扩展了我的答案以包含有关刀片的信息。虽然我还要注意刀片模板也可以像任何其他 PHP 文件一样工作,您可以在任何地方添加 块,但建议避免将业务逻辑拉入模板。
    • 另外,如果你想在表格中使用它,你希望它们作为单元格(表格中从左到右的块)还是单个单元格,每行一个(从上到下堆叠)?您需要添加适当的单元格 (&lt;td&gt;) 和行 (&lt;tr&gt;) 标记以根据需要设置格式。
    • 您只需要为该行添加标记。您已将循环放置在单元格的中间,例如&lt;table&gt;&lt;tr&gt;&lt;td&gt;loop-is-here-right-now&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;。如果您希望输出是具有单个单元格的行,则循环应该是行所在的位置,例如&lt;table&gt;loop-should-go-here&lt;/table&gt;。并且循环应该输出该行的标记,例如&lt;tr&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;
    • hmmm...有什么办法吗?我可以通过分配一个新数组来思考,在新数组中答案是/否
    【解决方案2】:

    要让这个在 laravel 视图中工作,您可以使用 for 循环。

    @foreach ($array1 as $key => $value)
        {{isset($array2[$key]) && $value == $array2[$key] ? 'YES' : 'NO'}}
    @endforeach
    

    解释一下:

    内部是一个三元运算符,它计算相等并返回相应的值。

    当我们有

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多