当数据不应该显示在另一个数组中时

时间:2012-11-15 15:25:59

标签: php

我创建了一个理论上应该从另一个数组创建一个数组的函数(基本上我想做的就是将它降低到1级)。

我的问题是,不知何故,代码会在新数组中创建另一个数组,而不应该......而且输出更加奇怪。 最终的数组应该都处于同一级别,但不知何故,它会创建多维且具有额外值。

问题似乎在循环中,但我看不到

感谢任何帮助。

    public function pullCompetencyByCID ( $cID ) {
                    $sql = 'SELECT * FROM ldc_competency_'.$this->lang.' WHERE cID='.$cID;
                    $result = $this->db->query($sql)->fetchAll(PDO::FETCH_ASSOC);                   
                         foreach ( $result as $key2 => $val2 ){
                                switch ($key2){
                                    case 'cName':       $cName = $val2;         
                                                        break;
                                    case 'cID':         $cID = $val2;
                                                        break;
                                    case 'cLevel':      $cLevel = $val2;
                                                        break;
                                    case 'cDetails':    $cDetails = $val2;
                                                        break;
                                    case 'cSummary':    $cSummary = $val2;
                                                        break;
                                }
                        }
                    $pullCompetency = array('cName'=>$cName,'cID'=>$cID, 'cLevel'=>$cLevel, 'cDetails'=>$cDetails, 'cSummary'=>$cSummary);          

                    return $pullCompetency;
    }

该代码的输出是

 Array ( 
    [cName] => Array ( 
                        [cID] => 2 
                        [cName] => dos
                        [cLevel] => 2
                        [cDetails] => doss
                        [cSummary] => dosssss 
                         ) 
    [cID] => 2
    [cLevel] => 
    [cDetails] => 
    [cSummary] => 
)

$result的输出是

Array ( 
    [0] => Array ( 
                    cID] => 2 
                    [cName] => dos 
                    [cLevel] => 2 
                    [cDetails] => doss 
                    [cSummary] => dosssss
                     )
     )

为了避免混淆,理想的结果应该是

 Array ( 
        [cID] => 2 
        [cName] => dos 
        [cLevel] => 2 
        [cDetails] => doss 
        [cSummary] => dosssss
         )

2 个答案:

答案 0 :(得分:2)

请尝试使用此功能:

public function pullCompetencyByCID ( $cID ) {
    $sql = 'SELECT * FROM ldc_competency_'.$this->lang.' WHERE cID='.$cID;
    return $this->db->query($sql)->fetch(PDO::FETCH_ASSOC);                   
}

您的函数似乎正在使用从以下位置返回的数组执行大量冗余工作:

PDOStatement::fetchAll(PDO::FETCH_ASSOC);

另外:如果在当前函数中找不到Competency,PHP将吐出/记录错误通知,因为$ cName之类的变量不会被初始化。

答案 1 :(得分:1)

由于您正在进行->fetchAll(),因此$ result将成为二维结果数组:

foreach ( $result as $key2 => $val2 ){
                      ^-- row number
                               ^--- array row contents

然后将该子数组填充到新数组中,从而生成子数组。