2015-07-21 80 views
0

CODE
Foreach Loop修复非法串偏移PHP

foreach ($LS::getBase() as $base) { 
      $fromDatabaseThumb = $base['base-thumbnail']; 
      $fromDatabaseDescription = $base['base-description']; 
      $fromDatabaseTitle = $base['base-title']; 
     echo " 
     <div style='background-color: #ffffff; width: 725px; height: 280px; display: inline-block; position: relative;''> 
     <div style='display: inline-block; max-width: 450px; max-height: 260px; margin: 12px; float: left;' class='baseThumb'> 
      <img src='$fromDatabaseThumb' style='max-width: 450px; max-height: 260px'> 
     </div> 
     <div class='baseInfo' style='display: inline-block; width: 250px; height: 253px; margin-top: 12px;'> 
      <h3 style='margin: 0; font-family: helvetica; max-width: 250px; max-height: 22px; overflow: hidden;'>$fromDatabaseTitle</h3> 
      <p style='margin-top: 8px; word-wrap: break-word;'> 
       <strong>Description:</strong><br> 
       " . $fromDatabaseDescription . " 
      </p> 
     </div> 
     </div> 
     "; 
     } 

getBase()功能

public static function getBase($what = '*') { 
self::construct(); 
if(is_array($what)){ 
    $columns = implode("`,`", $what); 
    $columns = "`{$columns}`"; 
}else{ 
    $columns = $what != "*" ? "`$what`" : "*"; 
} 

$sql = self::$dbh->prepare("SELECT {$columns} FROM baselayouts"); 
$sql->execute(); 
$data = $sql->fetch(\PDO::FETCH_ASSOC); 
if(!is_array($what)){ 
    $data = $what == "*" ? $data : $data[$what]; 
} 
return $data; 
} 


的错误: enter image description here


我做了什么

我已经做了研究,但没有找到任何工作。所以我修改了一下我的代码,仍然无法修复它。


EXTRA信息

我做了的var_dump(),因为我在面临同样的问题,因为我做了的var_dump(),所以我想我会做它只是其他帖子看到万一这样会以任何方式帮助你们。

var_dump()

array(4) { 
    ["id"]=> string(1) "1" 
    ["base-title"]=> string(14) "Base Layout #1" 
    ["base-thumbnail"]=> string(24) "/res/img/baseLayout1.png" 
    ["base-description"]=> string(73) "This is the base test description. Hopefully it does what it needs to do." 
} 
+0

什么行恰好是16-18? **编辑**想通了,你可以做'var_dump($ LS :: getBase());'在你的foreach循环之前? –

+0

@ iam-decoder是16-18。 **编辑**好吧,让我现在就这样做。 – RepeaterCreeper

+0

@ iam-decoder它给了我和上次一样的var_dump()结果。 – RepeaterCreeper

回答

2

foreach循环一样,不调用在每次迭代的方法。它在第一个循环中被调用一次,然后每次迭代循环返回值。因此,调用getBase将返回查询中的一行,然后循环显示该结果中的每个列,使循环内的$base为该列中的值,而不是该行的数组。 var_dump看起来是从循环内的getBase返回的返回,但不是$base。如果你在循环中做了var_dump($base);,你会看到每个字符串一次。为了解决这个问题,你可能想改变你的getBase以致电,它将返回一个像$result[rowNum][colName]这样的二维数组。

编辑:此外,循环切换到另一个结构像一个while循环,将评估在每次迭代的完整声明将把你带入一个无限循环的每次通话时间getBase你会重新查询,返回的第一行并重复。

+1

这是正确的答案。 –

+1

@repeatercreeper让我知道,如果这不够清楚,你或任何东西。我现在有点累,所以我可能已经开始漫不经心了。 –

+0

@JonathanKuhn哦,好吧!我现在明白了一点点。非常感谢您的宝贵时间。 :) – RepeaterCreeper