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

また、現在の関数にコンピテンシーが見つからない場合、$ cNameなどの変数が初期化されないため、PHPはエラー通知を吐き出し/ログに記録します。

于 2012-11-15T15:32:38.017 に答える
1

を実行しているので->fetchAll()、$resultは結果の2次元配列になります。

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

次に、そのサブ配列を新しい配列に詰め込み、サブ配列を作成します。

于 2012-11-15T15:31:04.483 に答える