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

时间:2014-05-26 15:01:31

标签: php associative-array

我想提高分辨率。缩短我的编程风格,初始化关联数组的字段并将文本附加到它们。

我这样做多年的方式,例如:

foreach($tagsArray as $tag) {
    if(!isset($mainArray[$tag])) {
        $mainArray[$tag] = '<li>'.$tag.'</li>';
    }
    else {
        $mainArray[$tag] .= '<li>'.$tag.'</li>';
    }
}

感觉太长了。

任何人都可以为我提供快捷方式吗?我们可以直接初始化而无需使用isset进行检查吗?

感谢。

4 个答案:

答案 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>';
}