首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要替换数组值而不是添加数组值?

问为什么要替换数组值而不是添加数组值?
EN

Stack Overflow用户
提问于 2014-10-25 02:15:36
回答 1查看 56关注 0票数 0

我正在编写一个PHP库,用于在我的页面页脚中添加控制器后,将JavaScript标记和代码包括在内。我有添加src标记和包含代码的标记的方法。add_src方法应该将数组或单个srcs添加到已经设置的数组中。由于某种原因,只将数组中的最后一项添加到源中。代码输出很好。

图书馆:

代码语言:javascript
复制
<?php

class JS {

    var $js_code = '';
    var $js_srcs = array();

    function add_code($js = ''){
        $this->js_code .= $js;
        return $this;
    }

    function add_src($src = '', $type = ''){
        if(is_array($src)){
            foreach($src as $type => $url){
                $this->js_srcs[] = script_tag($src, $type);
            }
        } else {
            $this->js_srcs[] = script_tag($src, $type);
        }
        return $this;
    }

    function reset_code(){
        $this->js_code = '';
        return $this;
    }

    function reset_srcs(){
        $this->js_srcs = array();
        return $this;
    }

    function generate(){
        $str = '';
        if(count($this->js_srcs) > 0){
            foreach($this->js_srcs as $src){
                $str .= $src;
            }
        }
        $str .= '
<script>
    '.$this->js_code.'
</script>';
        return $str;
    }

    function generate_srcs(){
        var_dump($this->js_srcs);
        $str = '';
        if(count($this->js_srcs) > 0){
            foreach($this->js_srcs as $tag){
                $str .= $tag.'
';
            }
        }
        return $str;
    }

    function generate_code(){
        if($this->js_code != ''){
            return "<script>
            ".$this->js_code."</script>";
        }
    }
}

用法:

代码语言:javascript
复制
<?php

$this->js->add_src(array('' => 'js/fileone.js', '' => 'js/filetwo.js', '' => 'js/filethree.js'));
$this->js->add_code('$("#element").myPlugin({});');
$this->js->add_src(array('js/global.js');

echo $this->js->generate_src();
echo $this->js->generate_code();

脚本标记函数:

代码语言:javascript
复制
    function script_tag($src = '', $type = '')
    {$str = '';
        $CI =& get_instance();
        if(is_array($src)){         
            foreach($src as $url){
                $str .= '<script ';
                if($type != ''){
                    $str .= 'type="'.$type.'" ';
                }               
                if(preg_match("^://^", $url)){ // If the url is absolute
                    $str .= 'src="'.$url.'"';
                } else { //If the url is relative
                    $str .= 'src="'.base_url($url).'"';
                }
                $str .= '></script>
';
            }
        } else {
            $str = '<script ';
            if($type != ''){
                $str .= 'type="'.$type.'" ';
            }
            $str .= 'src="'.$src.'"></script>
';
        }     
        return $str;                                
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-25 02:23:15

问题是这条线:

代码语言:javascript
复制
$this->js->add_src(array('' => 'js/fileone.js', '' => 'js/filetwo.js', '' => 'js/filethree.js'));

关联数组只能有一个具有特定键的数组。您试图对所有元素使用相同的键,因此它们会相互覆盖。你需要给他们不同的钥匙:

代码语言:javascript
复制
$this->js->add_src(array('type1' => 'js/fileone.js', 'type2' => 'js/filetwo.js', 'type3' => 'js/filethree.js'));

如果您不关心键,您只需使用一个普通的索引数组:

代码语言:javascript
复制
$this->js->add_src(array('js/fileone.js', 'js/filetwo.js', 'js/filethree.js'));

PHP将自动分配键0、1等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26558724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档