我想提高分辨率。缩短我的编程风格,初始化关联数组的字段并将文本附加到它们。
我这样做多年的方式,例如:
foreach($tagsArray as $tag) {
if(!isset($mainArray[$tag])) {
$mainArray[$tag] = '<li>'.$tag.'</li>';
}
else {
$mainArray[$tag] .= '<li>'.$tag.'</li>';
}
}
感觉太长了。
任何人都可以为我提供快捷方式吗?我们可以直接初始化而无需使用isset
进行检查吗?
感谢。
答案 0 :(得分:1)
好吧,你可以将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>';
}
答案 1 :(得分:1)
您可以使用PHP Ternary Operator:
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>';
答案 2 :(得分:0)
编辑:在发布指定$tagArray
包含唯一值的OP时,在发布此答案后,我了解到可能存在重复。我在这里留下这个答案,以防它有用,或者用作起点。
由于$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>"
}
如果你想要,你可以把它变成一个单行,但你会失去易读性。
答案 3 :(得分:0)
您可以使用ternary operator。例如:
foreach($tagsArray as $tag) {
$mainArray[$tag] = isset($mainArray[$tag])
? $mainArray[$tag] . '<li>' . $tag . '</li>' // if(isset($mainArray[$tag])), prepend it.
: '<li>' . $tag . '</li>';
}