Цикл через массив в PHP возвращается из MySQL Query - PullRequest
1 голос
/ 12 августа 2011

У меня есть часть приложения, которая проходит через возврат MySQL-запроса (как мы все знаем) в виде массива. Однако мне нужно несколько различных настроек формата для некоторых возвращаемых элементов, например, для одного столбца нужна японская валюта, для другого - американская валюта, а один из возвращаемых элементов - это ссылка на изображение.

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

Это то, что у меня есть для цикла.

while($row = mysql_fetch_array($result)) {      
    for($i=0;$i<=count($row);$i++) {
    if($row[i]==$row['Yen_Price']) {// I didn't expect this to work...but this is what I would like to do.
        echo "Hello";
    }
    echo "<td>" . $row[$i] . "</td>";
    }
}

Ответы [ 4 ]

6 голосов
/ 12 августа 2011
while ($row = mysql_fetch_assoc($result)) {
    foreach ($row as $key => $value) {
        if ($key == 'Yen_Price') {
            echo "Hello";
        }
        echo "<td>$value</td>";
    }
}

Сказав, что использование одной и той же функции для обработки всех результатов из всех возможных таблиц скоро станет довольно неуправляемым.Вы должны настроить это, чтобы соответствовать случаю так:

while ($row = mysql_fetch_assoc($result)) {
    echo "<td>Foo: $row[foo]</td>";
    echo "<td>Bar: $row[bar]</td>";
}
2 голосов
/ 12 августа 2011

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

// using mysql_fetch_assoc() as we don't need the numeric indices
while($row = mysql_fetch_assoc($result)) {
    foreach ($row as $col => $val) {
        echo '<td>';
        switch ($col) {
            case 'US_Price'  :
                printf('$%0.2f USD', $val);
                break;
            case 'Yen_Price' :
                printf('¥%0.2f', $val);
                break;
            case 'image'     :
                printf('<img src="%s">', htmlspecialchars($val));
                break;
        }
        echo '</td>';
    }
}

Обратите внимание, что это известный антипаттерн , и вам следует подумать о другом способе решения проблемы.

0 голосов
/ 18 сентября 2015

Используйте приведенный ниже код.Вы можете изменить его, как хотите.

<code>$select=" WRITE YOUR SELECT QUERY HERE ";
$queryResult= mysql_query($select);

//DECLARE YOUR ARRAY WHERE YOU WILL KEEP YOUR RECORD SETS
$data_array=array();

//STORE ALL THE RECORD SETS IN THAT ARRAY 
while ($row = mysql_fetch_array($queryResult, MYSQL_ASSOC)) 
{
    array_push($data_array,$row);
}


mysql_free_result($queryResult);


//TEST TO SEE THE RESULT OF THE ARRAY 
echo '<pre>';
print_r($data_array);
echo '
';// ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ЗДЕСЬ ДЛЯ КАЖДОГО ПЕТЛЯ, КАК ВАШИ ТРЕБОВАНИЯ

Спасибо

0 голосов
/ 12 августа 2011

До того, как я стал фанатом фреймворков, у меня был немного другой подход. Моя библиотека БД имела набор методов, которые возвращали мне массив наборов записей. Таким образом, мое взаимодействие с БД полностью отделено от того, как я использую наборы записей. Сделав это, легко настроить шаблон сетки, который может смотреть на массив и затем действовать соответственно. Вот какой-то псевдокод

$recordSets = $db->returnRecordSets("select some, columns from tablename");//extra param if I need array to be  associative
$recordSetsCount = count($recordSets);
if($recordSetsCount == 0){ echo 'Nothing to be done!'; //exit or return or break here}
for($i=0; $i< $recordSetsCount; $i++ == 0){
  $recordSet = $recordSets[$i];
  /*Inspect the $recordSet array and use it*/
}
...