【问题标题】:Laravel print array in blade phpBlade php中的Laravel打印数组
【发布时间】:2016-07-01 23:11:24
【问题描述】:

我想在我的 .blade.php 中显示一个数组,但它不能正常工作,所以我的控制器看起来像这样:

class WatchController extends Controller
{

    public function index()
    {
        $watchFolderPath = 'C:\\xampp\\htdocs\\Pro\\rec\\';
        $watchFolder     = $this->dirToArray($watchFolderPath);
        return view('watch.new')->with('watchFolder', $watchFolder);
    }

    # Get Directories of Path as Array
    function dirToArray($dir) {

        $result = array();

        $cdir = scandir($dir);

        foreach ($cdir as $key => $value)
        {
            if (!in_array($value,array(".","..")))
            {
                if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
                {
                    $result[$value] = $this->dirToArray($dir . DIRECTORY_SEPARATOR . $value);
                }
                else
                {
                    $result[] = $value;
                }
            }
        }
        return $result;
    }
}

在我的刀片内部,我只是试着这样称呼它:

{{ $watchFolder }}

但它不起作用,我收到以下错误:

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

编辑: 我得到的数组显示了目录中带有子文件夹的所有文件夹/文件。 (使用 dd())

目前看起来是这样的:

array:6 [▼
  123123 => array:2 [▼
    "subfolder1" => array:1 [▼
      0 => "video.mpg"
    ]
    "subfolder2" => array:1 [▶]
  ]
  789 => array:2 [▶]
  "folder1" => array:2 [▶]
  "folder2" => array:2 [▶]
  "folder3" => array:2 [▶]
  "folder1" => []
]

【问题讨论】:

  • 你需要遍历这些项目,比如@foreach,只需阅读刀片手册
  • {{ print_r($array, true) }}{!! dd($array) !!} 都会帮助你:)
  • 我想稍后在我的刀片中漂亮地展示它..
  • 那你为什么不接受阿列克谢的回答?
  • 你还在看cmets吗?

标签: php arrays laravel blade


【解决方案1】:

你应该使用@foreach:

@foreach ($watchFolder as $key => $value)
    Key: {{ $key }}    
    Value: {{ $value }} 
@endforeach

或者

@foreach ($watchFolder as $w)
    {{ $w->name }}    
@endforeach

【讨论】:

  • 如何打印出数组的所有值?
  • 如果您询问如何打印出所有调试值,您可以尝试在控制器中使用 dd($watchFolder); 或在视图中使用 {{ dd($watchFolder); }}。如果您问如何在生产中打印出数组值,请查看我的答案中的代码。
  • 不起作用我收到以下错误:helpers.php 第 469 行中的 ErrorException:htmlentities() 期望参数 1 为字符串,给定数组
  • 那是因为您正在构建复杂的数组,请在您的问题中发布您的数组结构示例,以便我们能够为您提供帮助。
  • 在刀片中 {{}}<?php echo?> 的替代品,并且还通过 e() 解析以逃避坏事。因此它需要 literal 标签用于 HTML 输出或 RAW php; {!!!!}<?php?> 也可以在刀片模板中免费使用(尽管不赞成)。
【解决方案2】:

从您的问题看来,您似乎想输出 array 以进行调试,正如我所评论的,您可以在刀片模板中简单地使用 <?php?> 标记。 p>

<?php dd($array); ?>

但是,blade 有一个原始输出标签对,即{!!!!}

一旦您准备好显示目录结构的输出,您应该将其分配给您的视图。

有 2 种快速的方法可以通过反射使用它;在你的控制器内部:

class WatchController extends Controller
{
    public function index(\Illuminate\Filesystem\Filesystem $filesystem)
    {
        $files = $filesystem->allFiles($watchFolderPath);

        // Your code.

        return view('name', ['files' => $files]);
    }
}

或者从container调用它:

class WatchController extends Controller
{
    public function index()
    {
        $files = app('files')->allFiles($watchFolderPath);

        // Your code.

        return view('name', ['files' => $files]);
    }
}

另外你应该使用Filesystem,没有必要重新发明轮子——你应该read the manual

【讨论】:

    【解决方案3】:

    仅在刀片中输出数组以进行调试:

            @php
                var_dump($arr);
            @endphp
    

    然后使用前面提到的 foreach 循环。

    【讨论】:

      【解决方案4】:

      对于那些可能看起来...像我的人

      echo implode("\n",$array);
      

      else if 是多维数组

      echo implode("\n",array_collapse($array));
      

      【讨论】:

        【解决方案5】:

        要将您的$watchFolder 数组输出到刀片文件中,您可以使用以下方法:

        <pre><code>{{ json_encode($watchFolder, JSON_PRETTY_PRINT) }}</code></pre>
        

        这将显示您的数组的格式良好的 JSON 版本并使其更具可读性:

        {
            "123123": {
                "subfolder1": [
                    "video.mpg"
                ],
                "subfolder2": []
            },
            "789": [],
            "folder1": [],
            "folder2": [],
            "folder3": []
        }
        

        如果您只需要在一行中显示JSON_PRETTY_PRINT,您也可以删除它:

        {"123123":{"subfolder1":["video.mpg"],"subfolder2":[]},"789":[],"folder1":[],"folder2":[],"folder3":[]}
        

        【讨论】:

          【解决方案6】:

          您可以简单地使用:

          @dump($arr)
          

          【讨论】:

          • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
          猜你喜欢
          • 2018-05-15
          • 1970-01-01
          • 1970-01-01
          • 2022-01-26
          • 1970-01-01
          • 2020-04-20
          • 1970-01-01
          • 1970-01-01
          • 2017-08-13
          相关资源
          最近更新 更多