我想提高效率。缩短我的编程风格,以初始化关联数组的字段并向其添加文本。
我做了很多年的方式,例如:
foreach($tagsArray as $tag) {
if(!isset($mainArray[$tag])) {
$mainArray[$tag] = '<li>'.$tag.'</li>';
}
else {
$mainArray[$tag] .= '<li>'.$tag.'</li>';
}
}
感觉太长了。
谁能给我提供一个快捷方式吗?我们可以直接init不需要和isset
确认吗?
谢谢。
可以使用PHP三元运算符:
foreach( $tagsArray as $tag ) {
$mainArray[$tag] = !isset( $mainArray[$tag] ) ? '<li>'.$tag.'</li>' : $mainArray[$tag] . '<li>'.$tag.'</li>' ;
}
如果$tagsArray
只包含唯一值,则不需要附加:
foreach( $tagsArray as $tag )
$mainArray[$tag] = '<li>'.$tag.'</li>';
可以将html部分移出if循环:
foreach($tagsArray as $tag) {
if(!isset($mainArray[$tag])) {
$mainArray[$tag] = '';
}
$mainArray[$tag] .= '<li>'.$tag.'</li>';
}
然后你可以用一行代码来缩短if:
foreach($tagsArray as $tag) {
if(!isset($mainArray[$tag])) $mainArray[$tag] = '';
$mainArray[$tag] .= '<li>'.$tag.'</li>';
}
可以使用三元运算符。例如:
foreach($tagsArray as $tag) {
$mainArray[$tag] = isset($mainArray[$tag])
? $mainArray[$tag] . '<li>' . $tag . '</li>' // if(isset($mainArray[$tag])), prepend it.
: '<li>' . $tag . '</li>';
}
编辑:在发布OP时指定$tagArray
包含唯一值,在发布此答案后,我了解到可能存在重复。我把这个答案留在这里,以防它可能有用,或者可以作为一个起点。
由于$mainArray
为空,且$tagsArray
包含唯一值:
$tagsArray = array("first","second","third");
$tagsTextArray = array_map(function($tag) {
return "<li>".$tag."</li>";
},
$tagsArray);
$mainArray = array_combine($tagsArray, $tagsTextArray);
var_dump($mainArray);
返回array(3) {
["first"]=>
string(14) "<li>first</li>"
["second"]=>
string(15) "<li>second</li>"
["third"]=>
string(14) "<li>third</li>"
}
如果你愿意,你可以把它变成一行,但你会失去可读性。