为什么我的数组值被替换而不是被添加?

时间:2014-10-25 02:15:37

标签: php arrays

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

图书馆:

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

用法:

<?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();

脚本标记功能:

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

1 个答案:

答案 0 :(得分:1)

问题在于这一行:

$this->js->add_src(array('' => 'js/fileone.js', '' => 'js/filetwo.js', '' => 'js/filethree.js'));

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

$this->js->add_src(array('type1' => 'js/fileone.js', 'type2' => 'js/filetwo.js', 'type3' => 'js/filethree.js'));

如果您不关心密钥,可以使用普通的索引数组:

$this->js->add_src(array('js/fileone.js', 'js/filetwo.js', 'js/filethree.js'));

PHP会自动分配密钥01等。