我有一个下面的数组,有一些相同的键和不同的值。如何在PHP中将相同的键值与该键组合?我用的是WAMP,Codeigniter

我有一个下面的数组,有一些相同的键和不同的值。如何在PHP中将相同的键值与该键组合?我用的是WAMP,Codeigniter,php,arrays,codeigniter,key,key-value,Php,Arrays,Codeigniter,Key,Key Value,我从导入CSV文件中获取这些数据。在CSV文件中,我的第一列是年份,其他所有列都是Make。我正在使用csvreader库解析CSV文件中的数据 我的CSVReader图书馆 class CI_Csvreader { var $fields; /** columns names retrieved after parsing */ var $separator = ','; /** separator used to explode each line

我从导入CSV文件中获取这些数据。在CSV文件中,我的第一列是年份,其他所有列都是Make。我正在使用csvreader库解析CSV文件中的数据

我的CSVReader图书馆

class CI_Csvreader {

    var $fields;        /** columns names retrieved after parsing */  
    var $separator = ',';    /** separator used to explode each line */  

    /** 
     * Parse a text containing CSV formatted data. 
     * 
     * @access    public 
     * @param    string 
     * @return    array 
     */  
    function parse_text($p_Text) {  
            $lines = explode("\n", $p_Text);  
            return $this->parse_lines($lines);  
    }  

    /** 
     * Parse a file containing CSV formatted data. 
     * 
     * @access    public 
     * @param    string 
     * @return    array 
     */  
    function parse_file($p_Filepath) {  
            $lines = file($p_Filepath);  
            return $this->parse_lines($lines);  
    }  
    /** 
     * Parse an array of text lines containing CSV formatted data. 
     * 
     * @access    public 
     * @param    array 
     * @return    array 
     */  
    function parse_lines($p_CSVLines) {  
            $content = FALSE;  
            foreach( $p_CSVLines as $line_num => $line ) {  
                    if( $line != '' ) { // skip empty lines  
                            $elements = explode($this->separator, $line);  

                            if( !is_array($content) ) { // the first line contains fields names  
                                    $this->fields = $elements;  
                                    $content = array();  
                            } else {  
                                    $item = array();  
                                    foreach( $this->fields as $id => $field ) {  
                                            if( isset($elements[$id]) ) {  
                                                    $item[$field] = $elements[$id];  
                                            }  
                                    }  
                                    $content[] = $item;  
                            }  
                    }  
            }  
            return $content;  
    }
我的CSV文件数据=>

Years   Make    Make    Make
2001    Acura   Honda   Toyota
2002    Acura   Honda   
2003    Acura           Toyota
2004                          
在上述文件年份中,Excel/CSV表中的数据可在以后更改

我的输出是一个数组。=>

Array
(
    [0] => Array
        (
            [Years] => 2001
            [Make] => Acura
            [Make] => Honda
            [Make] => Toyota
        )

    [1] => Array
        (
            [Years] => 2002
            [Make] => Acura
            [Make] => Honda
            [Make] => 
        )
    [2] => Array
        (
            [Years] => 2003
            [Make] => Acura
            [Make] => 
            [Make] => Toyota
        )
    [3] => Array
        (
            [Years] => 2004
            [Make] => 
            [Make] => 
            [Make] => 
        )
)
我希望我的结果数组如下=> 我想保留空值

Array
(
    [0] => Array
        (
            [Years] => 2001
            [Make] => Array(
                              [0]=>Acura
                              [1]=>Honda
                              [2]=>Toyota
                           )
        )

    [1] => Array
        (
            [Years] => 2002
            [Make] => Array(
                              [0]=>Acura
                              [1]=>Honda
                              [2]=>
                           )
        )
    [2] => Array
        (
            [Years] => 2003
            [Make] => Array(
                              [0]=>Acura
                              [1]=>
                              [2]=>Toyota
                           )
        )
    [3] => Array
        (
            [Years] => 2004
            [Make] => Array(
                              [0]=>
                              [1]=>
                              [2]=>
                           )
        )
)
另外,请告诉我如何得到没有空值的结果

Array
(
    [0] => Array
        (
            [Years] => 2001
            [Make] => Array(
                              [0]=>Acura
                              [1]=>Honda
                              [2]=>Toyota
                           )
        )

    [1] => Array
        (
            [Years] => 2002
            [Make] => Array(
                              [0]=>Acura
                              [1]=>Honda
                              [2]=>
                           )
        )
    [2] => Array
        (
            [Years] => 2003
            [Make] => Array(
                              [0]=>Acura
                              [1]=>
                              [2]=>Toyota
                           )
        )
    [3] => Array
        (
            [Years] => 2004
            [Make] => Array(
                              [0]=>
                              [1]=>
                              [2]=>
                           )
        )
)
如果有任何其他方法从CSV文件中以我想要的格式获取数据,那就可以了


谁能帮帮我吗。非常感谢。

您可以使用此功能解析您的CSV文件

function CSV_parse($string='', $has_header=true, $row_delimiter=PHP_EOL, $delimiter = "," , $enclosure = '"' , $escape = "\\" )
{
    $rows = array_filter(explode($row_delimiter, $string));
    $firstline = true;
    $data = array();

    foreach($rows as $row)
    {
        if($firstline && $has_header)
        {
            $firstline=false;
            continue;
        }

        $row = str_getcsv ($row, $delimiter, $enclosure , $escape);


        $dtrow=array('Years'=>$row[0], 'Makes'=>array());
        for($i=1;$i<count($row);$i++)
        {
            $make=trim($row[$i]);
            if($make=='')continue;
            $dtrow['Makes'][]=$make;
        }
        $data[] =$dtrow;

    }

    return $data;
}
函数CSV\u parse($string='',$has\u header=true,$row\u delimiter=PHP\u EOL,$delimiter=“,”,$enclosure='”,$escape=“\\”)
{
$rows=数组\过滤器(分解($row\分隔符,$string));
$firstline=true;
$data=array();
foreach($行作为$行)
{
如果($firstline&&$has_头)
{
$firstline=false;
继续;
}
$row=str_getcsv($row,$delimiter,$enclosure,$escape);
$dtrow=array('Years'=>$row[0],'Makes'=>array());
对于($i=1;$i)

您只需修改这个类中的几行即可获得所需的结果; } /** *解析包含CSV格式数据的文件。 * *@access-public *@param字符串 *@return数组 */ 函数parse_file($p_Filepath){ $lines=文件($p_Filepath); 返回$this->parse_行($line); } /** *解析包含CSV格式数据的文本行数组。 * *@access-public *@param数组 *@return数组 */ 函数parse_行($p_CSVLines){ $content=FALSE; foreach($line作为$line的p_csvline=>$line){ 如果($line!=''){//跳过空行 $elements=explode($this->separator,$line); 如果(!is_array($content)){//第一行包含字段名 $this->fields=$elements; $content=array(); }否则{ //PTK:=>新代码 $item=array('Years'=>$elements[0],'Makes'=>array()); 对于($i=1;$i字段为$id=>$field){ if(isset($elements[$id]){ $item[$field]=$elements[$id]; } }
//PTK Hi-Pati。我已经用我正在使用的CSVReader库文件编辑了我的问题。你能告诉我在哪里可以使用你的函数CSV_parse吗?哪些数据必须作为CSV文件内容传递?Hi-Viren,我已经添加了新代码。请参见编辑后的wordHi-Pati。你新编辑的代码完全符合我想要的输出结果。非常感谢你的h现在我没有15个名声来支持你的答案。但是当我有15个名声的时候,我一定会支持你的答案。上帝保佑你。