PHP:初始化关联数组字段并向其添加文本-事先不知道键值


PHP: Initializing associative Array Fields and appending text to them - without knowing the key values beforehand

我想提高效率。缩短我的编程风格,以初始化关联数组的字段并向其添加文本。

我做了很多年的方式,例如:

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>"
}

如果你愿意,你可以把它变成一行,但你会失去可读性。