У меня есть часть приложения, которое циклически возвращает запрос 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>"; } }
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>"; }
Я бы разметил эти результаты для каждой таблицы, но если вы хотите, чтобы она была в конечном счете гибкой, попробуйте этот вонючий код
// 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>'; } }
Обратите внимание, что это известный антипаттерн, и вы должны действительно думать о другом способе подхода к проблеме.
Используйте приведенный ниже код. Вы можете изменить его, как хотите.
$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 '</pre>'; // YOU CAN USE HERE FOR EACH LOOP AS PER YOUR REQUIREMENTS.
благодаря
До того, как я стал фанатиком, я использовал немного другой подход. В моей библиотеке db было множество методов, которые вернули мне массив наборов записей. Таким образом, я держу свое взаимодействие с db полностью отдельно от того, как я потребляю записи. Сделав это, легко установить шаблон сетки, который может смотреть на массив, а затем действовать соответствующим образом. Вот несколько псевдокодов
$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*/ }