【问题标题】:Displaying all the data in an array when it is a mixture of normal array and nested array当数组是普通数组和嵌套数组的混合时,显示数组中的所有数据
【发布时间】:2020-10-20 04:46:52
【问题描述】:

我得到了一个看起来像这样的数组

    $arr = [
        'body' => "",
        'json' => [
            'status' => '1',
            'fields' => [
                'title' => 'Product 1',
                'category' => 'Category 1',
                'description' => 'Test User 12',
            ],
            'token' => 'egrgreGERGREglergjerjgiorj'
        ],
        'status' => 200,
    ];

我想做的是显示所有数据。我遇到的问题是我收到此错误

htmlspecialchars() 期望参数 1 是字符串,给定数组

这是我的代码。

我的控制器

    $arr = [
        'body' => "",
        'json' => [
            'status' => '1',
            'fields' => [
                'title' => 'Product 1',
                'category' => 'Category 1',
                'description' => 'Test User 12',
            ],
            'token' => 'egrgreGERGREglergjerjgiorj'
        ],
        'status' => 200,
    ];

    return view('test', ['array' => $arr2]);

我的刀

    @if(isset($arr2))
        @foreach($arr2 as $k => $v)
            {{ $k }} - {{ $v }}
        @endforeach
    @endif

【问题讨论】:

  • 请在此处发布您在代码中使用htmlspecialchars 函数的地方。
  • @NikuNjRathod: Blade 模板引擎在回显值时使用htmlspecialchars()

标签: php laravel


【解决方案1】:

您可以在刀片文件中使用以下代码。

@if(isset($arr2))
    @foreach($arr2 as $k => $v)
        @if(is_array($v))
            @foreach($v as $Innerk => $Innerv)
                {{ $Innerk }} - {{ $Innerv }}
            @endforeach
        @else
            {{ $k }} - {{ $v }}
        @endif
    @endforeach
@endif

会有帮助的。

【讨论】:

    【解决方案2】:

    你有一个数组里面的数组,它是一个多维数组。在第一次迭代中,您正在回显数组内容,这恰好是另一个数组。 Blade {{ }} 可以打印字符串,而不是数组。所以你得到这个错误

    htmlspecialchars() 期望参数 1 是字符串,给定数组

    您必须检查该值是否为数组。然后打印出来。

    @if (isset($arr2))
        @foreach ($arr2 as $k => $v)
            {{ $k }} - 
            @if (is_array($v)) 
                @foreach ($v as $k2 => $v2)
                    @if (is_array($v2)) 
                        @foreach ($v2 as $k3 => $v3)
                            {{ $k3 }} - {{ $v3 }}
                        @endforeach
                    @else
                        {{ $v2 }}
                    @endif
                @endforeach
            @else
                {{ $v }}
            @endif
        @endforeach
    @endif
    

    这里的问题是,如果你不知道你的多维数组的深度,你必须一次又一次地循环。

    【讨论】:

      【解决方案3】:

      您可以将数组展平为一维并为键使用点符号:

      use Illuminate\Support\Arr;
      
      $flattened = Arr::dot($arr); // $arr is your array
      
      // would give you an array like this
      [
       "body" => "",
       "json.status" => "1",
       "json.fields.title" => "Product 1",
       "json.fields.category" => "Category 1",
       "json.fields.description" => "Test User 12",
       "json.token" => "egrgreGERGREglergjerjgiorj",
       "status" => 200,
      ]
      

      现在您可以使用一个循环来列出所有键和值:

      @foreach ($flattened as $key => $value)
          {{ $key }} - {{ $value }}
      @endforeach
      

      如果您只想要键名的最后一段,您可以只显示该部分:

      @foreach ($flattened as $key => $value)
          {{ last(explode('.', $key)) }} - {{ $value }}
      @endforeach
      

      Laravel 8.x Docs - Helpers - Arrays and ObjectsArr::dot

      Laravel 8.x Docs - Helpers - Arrays and Objectslast

      【讨论】:

        猜你喜欢
        • 2021-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-03
        • 2020-11-09
        相关资源
        最近更新 更多