我创建了一个理论上应该从另一个数组创建一个数组的函数(基本上我想做的就是将它降低到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
)
答案 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
然后将该子数组填充到新数组中,从而生成子数组。