can速记法在foreach中的应用


can shorthand method applied in foreach?

所以我在谷歌上找到了这个SHORTHAND PHP方法,比如:

if(isset($a))
{
    $a = TRUE;
}
else
{
    $a = FALSE;
}

可以在单行语句中转换为:$a = isset($a) ? TRUE : FALSE;

它工作正常,并且我有一个脚本无法应用SHORT HAND方法。

PHP:

<?php
$letters = ['1' => 'A', '2' => 'B', '3' => 'C'];
$data['LETTER'] = "";
foreach($letters as $id => $letter)
{
    $data['LETTER'] .= "<option value=$id>".$letter."</option>";
}
$html = file_get_contents('test.html');
echo $html = str_replace(array_keys($data),array_values($data),$html);
?>

我已经结束使用这个SHORTHAND METHOD,它根本不起作用

$data['LETTER'] = foreach($letters as $id => $letter) ? "<option value=$id>".$letter."</option>" : "";

有没有可能缩短上面的脚本?

foreach没有简写方法,但可以使用array_map:实现

$data['LETTER'] = implode(array_map(function($id, $letter){ return "<option value=$id>".$letter."</option>"; }, $letters));

您可以使用类似以下的函数

function getOptions($letters){
    $opt = "";
    foreach($letters as $id => $letter){
        $opt .= "<option value=$id>".$letter."</option>";
    }
    return $opt;
}
$letters = array('1' => 'A', '2' => 'B', '3' => 'C');
$data['LETTER'] = getOptions($letters);

换句话说,

foreach($letters as $id => $letter):
    $data['LETTER'] .= "<option value=$id>".$letter."</option>";
endforeach;