Laravel将修改后的数组返回视图

时间:2017-10-12 13:53:51

标签: php laravel

假设我有这个Laravel Eloquent模型:

$scores = [];
$dataScores = Book::where('author_id', '=', $uid)
            ->select('score')
            ->get();

结果是:

[{
    "score": 30
},
{
    "score": 100
},
{
    "score": 17
},
{
    "score": 75
},
{
    "score": 17
},
{
    "score": 0
},
{
    "score": 60
},
{
    "score": 100
},
{
    "score": 17
},
{
    "score": 67
},
{
    "score": 83
},
{
    "score": 50
},
{
    "score": 100
},
{
    "score": 50
},
{
    "score": 83
},
{
    "score": 38
},
{
    "score": 90
},
{
    "score": 10
},
{
    "score": 83
},
{
    "score": 83
},
{
    "score": 60
},
{
    "score": 80
},
{
    "score": 13
},
{
    "score": 33
},
{
    "score": 33
}]

所以,在我返回view()之前我想,我会这样做:

    for ($s=0; $s < count($dataScores); $s++) {
        array_push($scores, $dataScores[$s]->score);
    }

    return view(
        'layouts.dashboard.main',
        [
            'menu' => 'book-dashboard',
            'scores' => $scores
        ]
    );

所以,我只是在Laravel Blade视图中访问{{ $scores }},我想我会得到

$scores =  [
    30,
    100,
    17,
    75,
    17,
    0,
    60,
    100,
    17,
    67,
    83,
    50,
    100,
    50,
    83,
    38,
    90,
    10,
    83,
    83,
    60,
    80,
    13,
    33,
    33
];

但我得到了:

  

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

但是如果我只包含score / x的键/值的修改前的数组,那么它会返回正常。我只想要一个数组中的得分值。

3 个答案:

答案 0 :(得分:2)

首先,您可以省略此代码:

for ($s=0; $s < count($dataScores); $s++) {
        array_push($scores, $dataScores[$s]->score);
    }

相反,只需使用:

$dataScores = Book::where('author_id', '=', $uid)
            ->select('score')
            ->get()
            ->pluck('score);

这将产生一个像$ scores = [1,2,3,4,5 ...]

这样的数组

显然你不能用像{{$ scrores}}这样的刀片渲染它 你必须首先破坏数组。

这样做:

return view(
        'layouts.dashboard.main',
        [
            'menu' => 'book-dashboard',
            'scores' => implode(" ", $scores);
        ]
    );

您将获得&#34; 1 2 3 4 5 6 ...&#34;

的输出

答案 1 :(得分:0)

试试这样:

$scores = [];
$dataScores = Book::where('author_id', '=', $uid)
            ->select('score')
            ->get()
            ->toArray();

        foreach($dataScores as $key => $value){
            array_push($scores,$value);
        }    

        return view(
        'layouts.dashboard.main',
        [
            'menu' => 'book-dashboard',
            'scores' => $scores
        ]
    );

答案 2 :(得分:0)

我认为您可以使用pluck收集方法来避免手动执行循环并获取仅包含您需要的键/值的映射数组

<?php
$scores = Book::where('author_id', '=', $uid)
   ->select('score')
   ->get()
   ->pluck('score');

其实你说过

  

但是如果我包含之前修改过的数组只有得分/ x的键/值..那么它返回正常。我只想要一个数组中的得分值。

这是有效的,因为Eloquent Collections对象已经实现了__toString()魔术方法,以便能够获取对象的字符串表示,所以如果你尝试这样做

{{$scores}} //you will get [1,2,3,4,5] 
//(the string representation defined into the __toString method)

但是如果你试图将它转换为数组,你将破坏函数签名,因为你试图传递数组而不是字符串

因此,如果您需要将值转换为自定义字符串或逗号分隔值,则可以将implode方法附加到调用链

<?php
$scores = Book::where('author_id', '=', $uid)
   ->select('score')
   ->get()
   ->pluck('score')
   ->implode(',');

现在,如果您在视图中使用{{$scores}},则会打印&#39; 1,2,3,4,5,6&#39;