Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:初始化关联数组字段并向其追加文本-事先不知道键值_Php_Associative Array - Fatal编程技术网

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

PHP:初始化关联数组字段并向其追加文本-事先不知道键值,php,associative-array,Php,Associative Array,我想提高resp。缩短我初始化关联数组字段并向其添加文本的编程风格 我多年来的做法,例如: foreach($tagsArray as $tag) { if(!isset($mainArray[$tag])) { $mainArray[$tag] = '<li>'.$tag.'</li>'; } else { $mainArray[$tag] .= '<li>'.$tag.'</li>';

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

我多年来的做法,例如:

foreach($tagsArray as $tag) {
    if(!isset($mainArray[$tag])) {
        $mainArray[$tag] = '<li>'.$tag.'</li>';
    }
    else {
        $mainArray[$tag] .= '<li>'.$tag.'</li>';
    }
}
foreach($tagsArray作为$tag){
如果(!isset($mainArray[$tag])){
$mainArray[$tag]='
  • 。$tag'
  • '; } 否则{ $mainArray[$tag]。='
  • '.$tag'.
  • '; } }
    只是感觉太长了

    有人能给我一个捷径吗?我们是否可以直接初始化而不检查
    isset


    谢谢

    您可以将html部分移出if循环:

    foreach($tagsArray as $tag) {
        if(!isset($mainArray[$tag])) {
            $mainArray[$tag] = '';
        }
        $mainArray[$tag] .= '<li>'.$tag.'</li>';
    }
    
    foreach($tagsArray作为$tag){
    如果(!isset($mainArray[$tag])){
    $mainArray[$tag]='';
    }
    $mainArray[$tag]。='
  • '.$tag'.
  • '; }
    然后,您可以通过为if使用一行代码来缩短它:

    foreach($tagsArray as $tag) {
        if(!isset($mainArray[$tag])) $mainArray[$tag] = '';
        $mainArray[$tag] .= '<li>'.$tag.'</li>';
    }
    
    foreach($tagsArray作为$tag){
    如果(!isset($mainArray[$tag]))$mainArray[$tag]='';
    $mainArray[$tag]。='
  • '.$tag'.
  • '; }
    您可以使用PHP:


    编辑:在发布OP时,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);
    
    $tagsArray=数组(“第一”、“第二”、“第三”);
    $tagsTextArray=数组\映射(函数($tag){
    返回“
  • ”$tag.
  • ”; }, $tagsArray); $mainArray=array\u combine($tagsArray,$tagsTextArray); 变量转储($mainArray);
    返回

    array(3) {
      ["first"]=>
      string(14) "<li>first</li>"
      ["second"]=>
      string(15) "<li>second</li>"
      ["third"]=>
      string(14) "<li>third</li>"
    }
    
    数组(3){
    [“第一”]=>
    字符串(14)“
  • 第一个” [“秒”]=> 字符串(15)“
  • 秒” [“第三”]=> 字符串(14)“
  • 第三个” }
  • 如果你愿意,你可以把它做成一行,但是你会失去可读性。

    你可以使用。例如:

    foreach($tagsArray as $tag) {
        $mainArray[$tag] = isset($mainArray[$tag]) 
                         ? $mainArray[$tag] . '<li>' . $tag . '</li>' // if(isset($mainArray[$tag])), prepend it.
                         : '<li>' . $tag . '</li>';
    }
    
    foreach($tagsArray作为$tag){
    $mainArray[$tag]=isset($mainArray[$tag])
    ?$mainArray[$tag].
  • '.$tag.
  • '//if(isset($mainArray[$tag]),在它前面加上前缀。 :“
  • ”.$tag.“
  • ”; }
    在进入foreach循环之前,您能否显示
    $mainArray
    包含的内容的示例?
    $mainArray
    之前为空<代码>$mainArray=array()和
    $tagsArray
    包含多个标记(字符串)。$tagsArray可以包含重复的值,还是唯一的?
    $tagsArray
    不包含唯一的值。非常抱歉,它不包含唯一的值。是我的错。上述评论已更改。但是,您可以将您的答案留给具有相同问题但唯一值的其他人。好的,我已经编辑了我的答案,以指定它适用于唯一的标记数组。这对我来说很好,尽管仍然存在isset检查。我想到了()?:但是,操作员没有想到在
    之后再添加$mainArray[$tag],如果没有isset()检查,您将立即看到未定义的索引,我想有人知道解决方法。一种简写符号,它可以做到这一点。我怀疑,由于您试图使用不存在的键附加到数组成员,因此可以使用@sign或通过将error_reporting()设置为
    error_reporting(E_ALL^E_NOTICE)来抑制错误通知,但最好不要有错误,而不要抑制错误。哦,该死。。已由@Danijel回答。弱连接。
    
    array(3) {
      ["first"]=>
      string(14) "<li>first</li>"
      ["second"]=>
      string(15) "<li>second</li>"
      ["third"]=>
      string(14) "<li>third</li>"
    }
    
    foreach($tagsArray as $tag) {
        $mainArray[$tag] = isset($mainArray[$tag]) 
                         ? $mainArray[$tag] . '<li>' . $tag . '</li>' // if(isset($mainArray[$tag])), prepend it.
                         : '<li>' . $tag . '</li>';
    }