2009-02-05 67 views
0

我有一個簡化的ajay腳本,從中刪除了所有不相關的代碼。我遇到的問題是首先與我的列數組和隨後的foreach循環。我想要遍歷每個元素,並將相應的元素更改爲YES(如果爲true),如果爲false,則將其更改爲NO,但我不明白爲什麼它不起作用。循環陣列問題

如果有任何問題,如語法錯誤或大括號等,它們是簡化我的代碼的問題,並不存在於我的機器上的版本。

<?php 
$con = mysqli_connect("localhost", "", "", ""); 
if (!$con) { 
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error(); 
    exit; 
} 
$con->set_charset("utf8"); 
    $query1 = 'SELECT EGGS, SALAD, TREES, REVISED FROM AUCTIONS WHERE ARTICLE_NO = ?'; 
    if ($getRecords = $con->prepare($query1)) { 
     $getRecords->bind_param("s", $pk); 
     $getRecords->execute(); 
     $getRecords->bind_result($EGGS, $SALAD, $TREES, $REVISED); 
     while ($getRecords->fetch()) { 
     $columns = array('EGGS', 'SALAD', 'TREES', 'REVISED'); 
      foreach($columns as $column) { 
       $$column = $columns[$column] ? 'YES' : 'NO'; 
      } 
      imageSize = imageResize($PIC_URL, 250, 300); 
      echo "<h1>".$EGGS."</h1>"; 
     } 
    } 
function imageResize($imageURL, $maxWidth, $maxHeight) { 
    $imageSize["width"] = 0; 
    $imageSize["height"] = 0; 
    $size = getimagesize($imageURL); 
    if ($size) { 
     $imageWidth = $size[0]; 
     $imageHeight = $size[1]; 
     $wRatio = $imageWidth/$maxWidth; 
     $hRatio = $imageHeight/$maxHeight; 
     $maxRatio = max($wRatio, $hRatio); 
     if ($maxRatio > 1) { 
      $imageSize["width"] = $imageWidth/$maxRatio; 
      $imageSize["height"] = $imageHeight/$maxRatio; 
      return $imageSize; 
     } else { 
      $imageSize["width"] = $imageWidth; 
      $imageSize["height"] = $imageHeight; 
      return $imageSize; 
     } 
    } else { 
     die(print_r(error_get_last())); 
    } 
} 
+0

確實你現在將$ pk綁定到「s」而不是「i」,這意味着我對你的其他問題的提示是正確的嗎? – Alnitak 2009-02-05 16:47:05

+0

是的,確切地說。我以爲我標記爲正確的? – 2009-02-06 09:47:17

+0

你當時還沒有 - 但你現在有,謝謝! – Alnitak 2009-02-06 10:28:01

回答

1

你的循環是錯誤的 - $列[ '蛋']不存在:

$columns = array('EGGS', 'SALAD', 'TREES', 'REVISED'); 
foreach($columns as $column) { 
    $$column = $columns[$column] ? 'YES' : 'NO'; 
} 

它應該成爲:

$columns = array('EGGS', 'SALAD', 'TREES', 'REVISED'); 
foreach($columns as $column) { 
    $$column = $$column ? 'YES' : 'NO'; 
} 

或者更好的是:

$tmp = array(); 
$columns = array('EGGS', 'SALAD', 'TREES', 'REVISED'); 
foreach($columns as $column) { 
    $tmp[$column] = $$column ? 'YES' : 'NO'; 
} 

讓你不要過度寫你的約束變量。

也請注意,出於性能方面的原因,您應該在while()循環之外移動該常量數組聲明。

0

$columns[$column]不存在 - 我無法想象你正在嘗試做的,但是這是一個錯誤。

+0

爲什麼?對於每個$列作爲$列將意味着它確實存在? – 2009-02-06 10:08:12

0

foreach($columns as $column) { 
    $$column = $columns[$column] ? 'YES' : 'NO'; 
} 

改變你的循環:

foreach($columns as $key=>$column) { 
    $$column = $columns[$key] ? 'YES' : 'NO'; 
} 
+0

這仍然是不正確的 - $列是一個常量字符串數組,並且_not_從查詢 – Alnitak 2009-02-05 16:40:00

0

更改環路:

foreach($columns as $column) { 
    $$column = $$column ? 'YES' : 'NO'; 
} 
1

但我只想補充一點,同時使用的變量,比如$$ COLUMN似乎是一個不錯的功能,它以後也會帶來麻煩,併產生大量的額外變量。

爲什麼不創建一個臨時數組,並保存所有YES/NO對?

另外,PHP不允許變量包含數字。我不知道,當你創建一個變量,這樣會發生什麼:

$name = "123variable"; 
$$name = "foo"; 

我會檢查出來。

編輯:我剛纔看到你只將查詢結果綁定到一些變量上。不過我認爲這不是一種好的編碼風格。