вернуть MySQL набор результатов в Foreach для моей функции getAll - PullRequest
0 голосов
/ 05 ноября 2011

может быть основным, но я написал функцию, которая выбирает все из dbtable в бэкэнде.Но во внешнем интерфейсе я хочу использовать его с foreach для отображения результатов в любом месте.

Array(
[0] => Array
    (
        [stockCatID] => 1
        [stockCatName] => Copper
        [stockParentCat] => 0
    )

[1] => Array
    (
        [stockCatID] => 2
        [stockCatName] => Zinc
        [stockParentCat] => 0
    )
)

Когда я отправляю набор результатов на мою интерфейсную страницу, появляется этот массив.Поэтому я не могу воспроизвести его с помощью:

<?php
$r = getAll("stockcategories");
foreach($r as $k=>$v) {
    echo ("<p><strong>$k</strong>: $v</p>");   
} 

С указанным выше массивом результатов iu выводит:

0 = Array1 = Array

Добавлено: Я не хочу выводить эхо из бэкэнд-функции.

Итак, наконец, моя функция:

<?php
function getAll ($tableName,$orderBy="", $limit="") {
        $orderBy = $orderBy == "" ? $orderBy : (" ORDER BY =\"".$orderBy."\" "); 
        $limit = $limit == "" ? $limit : (" LIMIT =\"".$limit."\" ");
        $q  = mysql_query("SELECT * FROM $tableName $orderBy $limit");
        if (!$q) { die('Could not connect: ' . mysql_error());} else { $num=mysql_numrows($q); 
        if ($num != 0 ) { 
            while($r = mysql_fetch_assoc($q)) { 
                $rArray[] = $r;
            }
            mysql_free_result($q); 
            return $rArray; 
            } else { echo '<span class="notification n-error">No Record Found</span>'; return false; }        
    }
?>

Спасибо за любую помощь.

Ответы [ 4 ]

0 голосов
/ 05 ноября 2011

Или вы можете сделать это за один цикл, как это:

foreach($r as $row) {
    echo ("<p><strong>$row['stockCatName']</strong>: $row['whatever']</p>");   
} 

Зависит от того, какой вывод вам нужен, на самом деле.

0 голосов
/ 05 ноября 2011

$rArray - это двумерный массив, но вы обращаетесь к нему только в одном измерении. Вам нужны вложенные foreach петли. Внешний цикл повторяется по каждой возвращаемой строке, а внутренний повторяется по столбцам в каждой строке:

foreach ($r as $row) {
  foreach($row as $k=>$v) {
    echo ("<p><strong>$k</strong>: " . htmlspecialchars($v) . "</p>");   
  }
} 

Обновление функция для итерации по обоим измерениям:

function printResults($resultArray) {
    foreach ($resultArray as $row) {
      foreach($row as $k=>$v) {

        // Note sanitizing against XSS if this was user-input...
        echo ("<p><strong>$k</strong>: " . htmlspecialchars($v) . "</p>");   
      }
    } 

}

Назовите это как:

$r = getAll("stockcategories");
printResults($r);
0 голосов
/ 05 ноября 2011
<?php
$outer_array = getAll("stockcategories");
foreach($outer_array as $inner_array) {
    foreach($inner_array as $k => $v {
      echo "<p><strong>$k</strong>: $v</p>";
    }
} 

у вас есть массив массивов, и ваш цикл пересекает только внешний массив.

0 голосов
/ 05 ноября 2011

Как вы сами отметили, массив содержит в качестве значений массивы. $v - это массив с ключами stockCatID, stockCatName и stockParentCat. Попробуйте что-то вроде:

$r = getAll("stockcategories");
foreach($r as $record) {
    foreach($record as $k=>$v) {
        echo("<p><strong>$k</strong>: $v</p>");
    }
    echo("<hr/>");
}
...