[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Флудик-с
Страницы: 1, 2, 3, 4, 5, 6
Michael
У ТС-а задание:
Цитата
Но если массива нет, то выкидывает ошибку. Как это обойти, массив достаю из БД, а там может быть ни одного поля.

Его вариант:
$res = mysql_query('SELECT id ... WHERE id>1000');
$a = array();
while ($row = mysql_fetch_assoc($res)) {
$a[] = $row['id'];
}
if (in_array(10, $a)) {
// что то
}

А ты предлагаешь следующее:
$res = mysql_query('SELECT id ... WHERE id>1000');
while ($row = mysql_fetch_assoc($res)) {
$a[] = $row['id'];
}
if (!empty($a) && in_array(10, $a)) {
// что то
}

Я не считаю твой вариант хорошим стилем. Даже банально это $a может быть где то выше иметься, да и по виду...

_____________
There never was a struggle in the soul of a good man that was not hard
twin
Этого кода нет в топике, а значит это просто твои догадки. Каким бы ты это стилем не считал, без цикла твой вариант потерпит фиаско, так как mysql_fetch_assoc вернет false в случае отсутствия результата. А это не массив, как не крути.



_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Michael
Цитата (twin)
Этого кода нет в топике, а значит это просто твои догадки.

Это не мои догадки. Это анализ той проблемы, которую спрашивал ТС.
А вот ты походу совсем не понял что он спрашивал.
Цитата (twin)
без цикла твой вариант потерпит фиаско, так как mysql_fetch_assoc вернет false в случае отсутствия результата

ну и бред ты несешь. Приведи код в какой ситуации фиаско, чтобы не быть голословным? Массивом инициализируется переменная и все, она уже массив. А есть цикл дальше или нет - неважно, он наполнит массив или не наполнит.

_____________
There never was a struggle in the soul of a good man that was not hard
glock18
Цитата (Michael @ 12.08.2013 - 07:02)
Цитата (Valick @ 12.08.2013 - 08:46)
Да я ошибся, потому, что я обычный человек, а обычным людям свойственно ошибаться.

Ты ошибся не потому что ты человек, которому свойственно ошибаться.
А потому что ты плохо усвоил не только основы php, а и основы программирования вообще.
Программист не имеет права не знать таких элементарных вещей. Не понимая элементарных базовых вещей и все остальные решения выйдут говнокодерские. Это очень о многом говорит. А ведь хотел поумничать. Так бы и не опозорился. С вами всегда так бывает. Эх, любители...

Да ладно, обороты не набирай Michael. Валик сделал глупую ошибку, чего я лично даже и не ожидал бы от него, понятно, что пробел в знаниях, и довольно серьезный. Но он повел себя вполне корректно, признав ошибку. Здесь это умение не помешало бы нехилой доле форумчан.
glock18
twin
!empty() не гарантирует, что тип переменной массив. В каком-то конкретном случае это исключено, но такая проверка вовсе не естественна, поскольку проверяя на пустоту, ты делаешь вывод что это массив.

PS: иногда и сам делаю, совсем изредка. Не скажу когда последний раз было, но было. Правда, это скорее от лени, чем от мысли, что решение правильное. Наиболее правильной логикой было бы объявить переменную как null перед сбором массива/запросом, и уже потом можно просто обойтись is_array() && in_array без проверки на существование.
twin
Michael
Какой анализ... Анализировать можно то, что есть, а не то, что придумалось.

Пример я приводил, если недогнал, распишу подробнее
$res = mysql_query('SELECT .... WHERE id = 1000');
$a = mysql_fetch_assoc($res);

if (in_array(10, $a)) {
// что то
}

Я сгласен, что скорее всего у ТС твой вариант, но и такого ты отрицать не можешь, пока не видел код. Тем паче не можешь делать выводы о том, что вариант с empty() это "бэдовый" вариант. Который кстати я предложил как один из возможных в ключе проверки переменной.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
А вот с glock18 я соглашусь. Вот это более верно рассово. По крайней мере не зная подробностей кода:
Цитата
Наиболее правильной логикой было бы объявить переменную как null перед сбором массива/запросом, и уже потом можно просто обойтись is_array() && in_array без проверки на существование.


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
glock18
Цитата (Michael @ 12.08.2013 - 10:59)
Я не считаю твой вариант хорошим стилем. Даже банально это $a может быть где то выше иметься, да и по виду...


этот $a может быть на 400 строк выше объявлен smile.gif Максимальная читабельность и аккуратность будет: isset && is_array && in_array

Все прочие решения допускают ошибку в той или иной степени (не тот тип, неопределенная переменная, например). А в случае если определение переменной делается намного выше, то оно часто бывает не так уж и очевидно в коде.
Michael
Цитата (twin @ 12.08.2013 - 15:41)
Пример я приводил, если недогнал, распишу подробнее
$res = mysql_query('SELECT .... WHERE id = 1000');
$a = mysql_fetch_assoc($res);

if (in_array(10, $a)) {
  // что то
}

Смешной у тебя пример. И ошибочный.
В теме, с которой ты разделил эту, сказано:
Цитата
Как это обойти, массив достаю из БД


Ты в своем примере достаешь очень классный ассоциативный массив значений колонок, который без ключей - просто каша.. Но это мура. Это не тот накапливаемый массив каких то значений, среди которого потом будет поиск in_array.
Спрашивается - зачем упираться в изначально неверный вариант и под него придумывать код?... :blink:

_____________
There never was a struggle in the soul of a good man that was not hard
Michael
Цитата (glock18 @ 12.08.2013 - 15:40)
Наиболее правильной логикой было бы объявить переменную как null перед сбором массива/запросом, и уже потом можно просто обойтись is_array() && in_array без проверки на существование.

в том варианте, который у меня, этого не надо, это лишнее. В твиновом варианте?

_____________
There never was a struggle in the soul of a good man that was not hard
glock18
Ребята/товарищи/господа, давайте побольше уважения, пожалуйста, завелись с пол оборота. Я похоже пропустил момент, когда между вами отношения накалились так, но я лично тут не вижу по повода никакого для начала такого срача.

twin, кстати выводы по in_array Michael сделал верные. В практической задаче поиск in_array по строке из базы данных в принципе почти что невероятен.
glock18
Цитата (Michael @ 12.08.2013 - 13:57)
Цитата (glock18 @ 12.08.2013 - 15:40)
Наиболее правильной логикой было бы объявить переменную как null перед сбором массива/запросом, и уже потом можно просто обойтись is_array() && in_array без проверки на существование.

в том варианте, который у меня, этого не надо, это лишнее. В твиновом варианте?

Я объяснил уже минусы обоих вариантов какие были даны. Оба допускают ошибку программиста при определенных условиях.

Волнует кого из форумчан это или нет, меня лично мало интересует.
twin
glock18
Цитата
Максимальная читабельность и аккуратность будет: isset && is_array && in_array
А почему isset()... Чем !empty() хуже? smile.gif

Michael
Ты в своем амплуа. Впринципе не допускаешь никаких решений, кроме собственных. Еще и мурой обзываешь.

Ну вот представь себе допустим анкету. В таблице 10 ячеек, в одной из них верный ответ. Какой смысл собирать второй массив в цикле, что бы узнать, есть ли значение в одной из ячеек, а не строк?

Да вариантов может быть масса, ты мыслишь категорией гостевой книги, а что задумал ТС тебе не известно. Так что кто выкручивается - вопрос. Да и он риторический. Тебе вон glock18 объяснил, почему часто нужны именно проверки, а не инициализация. А ты до сих пор уперся.

Я бы ни секунды не спорил, был бы ТС представлен код. А так это чистой воды теория, которую ты однобоко пытаешься натянуть на своё мнение. Не признавая, что вариантов в теории может быть масса.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Michael
Цитата (glock18 @ 12.08.2013 - 16:00)
Цитата (Michael @ 12.08.2013 - 13:57)
Цитата (glock18 @ 12.08.2013 - 15:40)
Наиболее правильной логикой было бы объявить переменную как null перед сбором массива/запросом, и уже потом можно просто обойтись is_array() && in_array без проверки на существование.

в том варианте, который у меня, этого не надо, это лишнее. В твиновом варианте?

Я объяснил уже минусы обоих вариантов какие были даны. Оба допускают ошибку программиста при определенных условиях.

Перечитал твои посты, ссылки к минусам в моем примере кода так и не увидел...

_____________
There never was a struggle in the soul of a good man that was not hard
glock18
Цитата (Michael @ 12.08.2013 - 13:57)
в том варианте, который у меня, этого не надо, это лишнее. В твиновом варианте?

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

В данном конкретно случае, null мог бы означать техническую ошибку, а пустой массив отсутствие записей в базе, и поведение программы дальше может и должно быть разным в таких случаях.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.