假设我有这个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
的键/值的修改前的数组,那么它会返回正常。我只想要一个数组中的得分值。
答案 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;