0

我创建了一个函数,理论上应该从另一个数组创建一个数组(基本上我想做的是将它降低 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
         )
4

2 回答 2

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

另外:如果在您当前的函数中没有发现能力,PHP 将吐出/记录错误通知,因为诸如 $cName 之类的变量不会被初始化。

于 2012-11-15T15:32:38.017 回答
1

Since you're doing ->fetchAll(), $result is going to be a 2-D array of results:

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

you then stuff that sub-array into your new array, causing your sub-arrays.

于 2012-11-15T15:31:04.483 回答