Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вопросы от новичков
Форумы портала PHP.SU » » Вопросы новичков » Вопросы от новичков

Страниц (5): [1] 2 3 4 5 »
 

1. Symby - 14 Февраля, 2012 - 19:42:05 - перейти к сообщению
Не нашел такой темы, где новички задавали бы вопросы, длинною в несколько предложений, а то зачем темы то плодить? Улыбка
Я на php не больше недели, но мне помогает небольшой опыт на других языках, да и сам уже привык к стандартным конструкциям из языка к языку. Речь пойдет конечно не об этом. Да и больше это тема, сводится к тому что не хочу быть "быдлокодером".
Вот собственной персоной мой говнокод:
PHP:
скопировать код в буфер обмена
  1.  
  2. function outputArrays($res = resource) {
  3.         $logic = true;
  4.         echo "<table style='border: 1px solid black; padding: 4px;'><thead style='background: #fc0;'><tr>";
  5.         while($arrOutput = mysql_fetch_assoc($res)) {
  6.                 if ($logic) {
  7.                         foreach ($arrOutput as $key => $value) echo "<td>" . $key . "</td>";
  8.                 }
  9.                 echo "</tr></thead>";
  10.                 echo "<tbody style='background: #C2C2C2;'><tr>";
  11.                 foreach ($arrOutput as $value) echo "<td>" . $value . "</td>";
  12.                 $logic = false;
  13.         }
  14.         echo "</tr></tbody>";
  15.         echo "</table>";
  16.         echo "<br>";
  17. }
  18.  

Цель сего чуда создания была такова: У меня было около 10 таблиц которые просто нужно было выдать виде таблицы для показа. Когда начал реализовывать это, то понял а что как дурак занимаюсь копипастом(написал один подобный фрагмент и размножил на несколько для вывода каждый раз отдельной таблицы) и вырос код до приличных размеров. Поставленное условие выполнялось, но мне не понравилось и стал писать функцию. В функцию лишь передавался указатель от SQL запроса, который обрабатывал assoc, от использование mysql_fetch_array отказался(он мне еще в добавок выдавал численный массив).

Вопрос мой в том, рисую шапку посредством цикла foreach, где значения шапки выдаются ключи массива. Допустим есть 2 ряда, то рисует он два раза шапку. Решение написал такое if ($logic), проверял была ли уже отображена шапка. Знаю можно как то лучше решить этот вопрос но не додумываюсь пока, видимо из за малого опыта работы с php еще.

Ушел читать Котерова дальше. Извините что столько воды в тексте, но хочу и делаю для этого все чтоб стать профессиональным php программистом, и самого начала не писать говнокод.
2. LIME - 14 Февраля, 2012 - 20:00:32 - перейти к сообщению
можно поиграть с http://php.su/functions/?mysql-field-name
в цикле while (не пустое значение)
отличие в том что делается вне цикла фетча и один раз и без logic
3. Symby - 14 Февраля, 2012 - 20:23:28 - перейти к сообщению
LIME пишет:
можно поиграть с http://php.su/functions/?mysql-field-name

Спасибо за наводку на функцию. Помогла)
(Добавление)
Symby пишет:
LIME пишет:
можно поиграть с http://php.su/functions/?mysql-field-name

Спасибо за наводку на функцию. Помогла)


Все работает, но выдает варнинг:
Warning: mysql_field_name() [function.mysql-field-name]: Field 4 is invalid for MySQL result index 4 in Z:\home\php-test\www\php-output.php on line 22
Ясное дело, что такого поля нет, и он приводит к варнингу. Вид счет начинается с 0..3, пробовал блин и while, и for, все эта ошибка...
4. LIME - 14 Февраля, 2012 - 22:03:22 - перейти к сообщению
попробуйте while(isset(mysql-field-name($res,++$i)))
(Добавление)
вот нашел более подходящее http://php.su/functions/?mysql-list-fields
учитесь пользоваться онлайн документацией
http://php.su/functions/?mysql-num-fields
5. Symby - 15 Февраля, 2012 - 06:46:19 - перейти к сообщению
LIME Спасибо большое. Насчет num-fields знал, но что-то забыл. Больше надеюсь не будет глупых вопросов от меня.
Решил так:
PHP:
скопировать код в буфер обмена
  1. $num = mysql_num_fields($res)-1;
  2. for($i = 0; $i <= $num; $i++) echo "<td>" . mysql_field_name($res, $i) . "</td>";

Теперь к несуществующим элементам массива не обращается.
Раньше надо спать ложится, а то глубокой ночью не мог дописать (-1), так что старайтесь ложится пораньше Радость
6. Symby - 20 Февраля, 2012 - 11:27:06 - перейти к сообщению
Хотелось узнать про альтернативный синтаксис конструкций php, то есть про

Такие подобные конструкции используются для чего? Как я понимаю они используются для упрощения редактирования и чтения html кода заключенный в php файл?
7. DelphinPRO - 20 Февраля, 2012 - 11:43:56 - перейти к сообщению
Symby пишет:
Такие подобные конструкции используются для чего?
Легче воспринимаются в шаблонах посреди хтмл кода, только и всего
8. Symby - 20 Февраля, 2012 - 11:53:05 - перейти к сообщению
DelphinPRO пишет:
Легче воспринимаются в шаблонах посреди хтмл кода, только и всего

Оправдывается его использование? Или пользоваться стандартной конструкцией?
9. DelphinPRO - 20 Февраля, 2012 - 12:09:39 - перейти к сообщению
какая разница что использовать, если конструкции равнозначны?
исходите из личных предпочтений.
лично я предпочитаю фигурные скобки.
10. incker - 20 Февраля, 2012 - 14:46:22 - перейти к сообщению
Symby пишет:
Хотелось узнать про альтернативный синтаксис конструкций php, то есть про

Такие подобные конструкции используются для чего? Как я понимаю они используются для упрощения редактирования и чтения html кода заключенный в php файл?



нет endif и endwhile. все сделано умнее. чтоб можно было делать условие внутри условия которое в еще одном условии (то же самое while)



к примеру

if (условие) // первое условие
{
if (условие) действие; // второе условие (первое верно)
else действие; // второе условие неверно (первое верно)
}
else действие; // первое условие неверно
11. LIME - 20 Февраля, 2012 - 18:59:04 - перейти к сообщению
incker а что с if endif так нельзя?
12. Symby - 22 Февраля, 2012 - 20:05:26 - перейти к сообщению
Решаю проблему, нужно проделать такое..
Допустим:
PHP:
скопировать код в буфер обмена
  1.  
  2. //Есть переменная $a типа string
  3. $a = "SashaSlavaRomaDmitrySashaEvgen";
  4. //Нужна функция которая найдет слово Sasha в переменной, возвратит сколько раз встречается в строке, и допустим 1 = 0, 2 = 20
  5. // 1 - раз встретилось, 0 позиция в строке, 2 - раз встретилось в строке, 20 позиция в строке.
  6.  

Самому такое придется писать?? Или есть что то наподобие из стандартного??
13. IllusionMH - 22 Февраля, 2012 - 20:26:09 - перейти к сообщению
preg_match_all
(Добавление)
Затупил, так не прокатит.
Но можно попытаться через preg_split()
14. Symby - 22 Февраля, 2012 - 20:52:48 - перейти к сообщению
IllusionMH Нечего)
Я свою проблему немного по другому решил, изначально не так думал. Вот что значит не правильно поставленная задача! )
Теперь что мне делать ниже с ключом 5, там начинается новый массив, он мне допустим если все элементы рекурсивно выводит(чтоб по вложенным массивам тоже проходил) то он мне выводит Array, какую мне проверку сделать что если он наталкивается на такое вставляет допустим слово "массив". Надеюсь поняли что хочу)
PHP:
скопировать код в буфер обмена
  1.   0 => string 'Sasha' (length=5)
  2.   1 => string 'Roma' (length=4)
  3.   2 => string 'Dmitry' (length=6)
  4.   3 => string 'Slava' (length=5)
  5.   4 => string 'Nikita' (length=6)
  6.   5 =>
  7.     array
  8.       0 => string 'p1' (length=2)
  9.       1 => string 'p2' (length=2)
  10.       2 => string 'p3' (length=2)
  11.       3 =>
  12.         array
  13.           0 => string 'p4' (length=2)
  14.           1 => string 'p5' (length=2)
  15.           2 => string 'p6' (length=2)
  16.           3 => string 'p7' (length=2)
  17.           4 => string 'p8' (length=2)
15. LIME - 22 Февраля, 2012 - 20:58:42 - перейти к сообщению
IllusionMH тут нужен был strpos() в цикле со смещением на негоже
тут для числа вхождений можно счетчик цикла использовать
но есть и ф-ция для этого substr_count()
(Добавление)

 

Powered by ExBB FM 1.0 RC1