【问题标题】:Convert foreach loop into array using laravel5使用 laravel5 将 foreach 循环转换为数组
【发布时间】:2017-06-20 07:33:44
【问题描述】:
@foreach($users as $user)

$users[] = $user->name; 

@endforeach

我想得到这样的输出。

['X', 'Y', 'Z', 'C'];

注意:我需要这个,因为我必须在 JavaScript 函数中使用它。

【问题讨论】:

  • “我需要这个,因为我必须在 JavaScript 函数中使用它” - 然后使用json_encode
  • 你能说明你打算如何将它与 javascript 一起使用吗?另外,我假设$users 是一个 Eloquent Collection?
  • 感谢您的评论。我现在如何摆脱 js 中的这些引号。 [“A”、“B”、“”]@CBroe
  • 你使用的是什么版本的 Laravel?
  • Laravel 5.2 @RossWilson

标签: laravel foreach


【解决方案1】:

首先,您不能“将 foreach 循环转换为数组”,您可以使用该 foreach 循环来获取数组作为结果。在这种情况下,我不会使用 foreach 方法,有一些方法可以帮助您稍微清理一下代码。

根据$users 变量的类型,您有两个选项pluck()array_column()

// $users is a collection
json_encode($users->pluck('name'));

// $users is an array
json_encode(array_column($users, 'name'));  

如果您要在 javascript 中使用该输出,强烈建议使用 json_encode()(正如 cmets 指出的那样)。现在您可以将其发送到响应中并将其用作普通 JSON。

如果您使用 Blade 打印结果变量,请记住您需要使用 {!! !!},否则,如果您使用 {{ }},您会得到不需要的转义字符,因为它在后台使用了 htmlspecialchars() 函数。

希望对你有所帮助。

【讨论】:

  • 我能够将其转换为 json,但我得到的输出是 [“A”、“B”、“)而不是 ['A','B']
  • 我假设您使用刀片打印 json,只需使用 {!! !!} 而不是 {{ }} 来打印变量。
  • @KhiradBanu 很高兴它帮助了你!
  • @KhiradBanu 如果它解决了您的问题,请考虑接受该问题,以便其他人可以找到它。
【解决方案2】:

我建议您只在控制器中执行此操作,然后将其传递给您的视图

$userNames=implode(",",array_column($users,'name')); 
return view('your_view',['userNames'=>$userNames]);

然后在你的js中拆分为

var names="{!! $userNames!!}";
var names= names.split(",");

【讨论】:

  • 当他说他正在使用刀片和 laravel 时,为什么要使用 <?php echo
【解决方案3】:

当您尝试回显它们时,集合将自动转换为json

您看到" 的原因是因为使用{{ }} 会自动转义字符串以保护您。您可以改用{!! !!} 来防止这种情况发生。

试试这样的:

<script>

    var data = '{!! $users->pluck('name') !!}';

    console.log( JSON.parse(data));
</script>

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2019-10-01
    • 2023-02-05
    • 2021-03-12
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多