我想将$reqcolaborate
替换为$namepar
,我有这个控制器:
$reqcolaborate = DB::table("pra_kpis")
->distinct()
->pluck("kpi_parameters_id");
$namepar = DB::table('kpi_parameters')->pluck('name');
$idpar = DB::table('kpi_parameters')->pluck('id');
@foreach ($reqcolaborate as $parreq)
<option value="{{$parreq}}">
{{$parreq = str_replace($idpar, $namepar, $parreq)}}
</option>
@endforeach
例如数据
$namepar = array ('MFS active user', '#4g active users','VOLTE');
$idpar = array (1,2,12);
$reqcolaborate = array (1,2,12);
但是,为什么结果会像这样下拉
<option>MFS active user</option>
<option>#4g active users</option>
<option>MFS active user#4g active users</option>
我希望结果像这样下拉
<option>MFS active user</option>
<option>#4g active users</option>
<option>VOLTE</option>
答案 0 :(得分:1)
正如马特在这个问题上所评论的那样,str_replace()
将通过定位子串而不是全字符串来修改你想要的替换。如果要在不使用带锚点的正则表达式的情况下替换整个字符串,可以使用$idpar
和$namepar
编写自己的关联“查找”数组。
$namepar = array ('MFS active user', '#4g active users','VOLTE');
$idpar = array (1,2,12);
$reqcolaborate = array (1,2,12);
$assocpar=array_combine($idpar,$namepar); // write an associative array to relate $idpar with $namepar
foreach ($reqcolaborate as $parreq){
echo $assocpar[$parreq],"\n";
}
输出:
MFS active user
#4g active users
VOLTE
在你的控制器中(同样,我不使用Laravel),你可以这样写:
$reqcolaborate = DB::table("pra_kpis")
->distinct()
->pluck("kpi_parameters_id");
$lookup = array_combine(
DB::table('kpi_parameters')->pluck('id'),
DB::table('kpi_parameters')->pluck('name')
);
@foreach ($reqcolaborate as $parreq)
<option value="{{$parreq}}">
{{ $lookup[$parreq] }}
</option>
@endforeach
或者,如果查找数组中可能不存在id
,可能是:
@foreach ($reqcolaborate as $parreq)
<option value="{{$parreq}}">
{{ isset($lookup[$parreq]) ? $lookup[$parreq] : 'Whoops, replacement not found in lookup array -- do something!' }}
</option>
@endforeach