Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как отличить ноль от отсутствия записи?
 
 автор: Владимир55   (04.04.2008 в 14:54)   письмо автору
 
 


if ($ma[$i] != "")


Массив $ma[$i] может содержать текст и цифры, включая ноль, а некоторые элементы массива могут отсутствовать.

Перебираю весь массив с целью выбора только имеющихся элементов, но при таком условии пропадает и элемент $ma[$i] = 0.

Как отличить нулевое содержимое от отсутствия содержимого?

   
 
 автор: Atheist   (04.04.2008 в 14:56)   письмо автору
 
   для: Владимир55   (04.04.2008 в 14:54)
 

if( $ma[$i] !== "" )

   
 
 автор: Faraon   (04.04.2008 в 15:34)   письмо автору
 
   для: Владимир55   (04.04.2008 в 14:54)
 

Преобразовать числовой тип в строку
if((string) $ma[$i]!=="")

   
 
 автор: Atheist   (04.04.2008 в 15:38)   письмо автору
 
   для: Faraon   (04.04.2008 в 15:34)
 

Интересно, а добавив приведение $ma[$i] к типу string, ты расчитываешь, что результат будет отличаться от результата моего кода в лучшую сторону?

   
 
 автор: Владимир55   (04.04.2008 в 17:03)   письмо автору
 
   для: Владимир55   (04.04.2008 в 14:54)
 

Конструкцию

if ($ma[$i] !== "")

я попробовал в первую очередь. Она не срабатывает.

А вот

if ((string) $ma[$i]!=="")

делает то, что надо, спасибо!

Вот только я не понял, что значит (string) ?
В справочнике такого не сыскалось!

   
 
 автор: THERAPYbrother   (04.04.2008 в 17:04)   письмо автору
 
   для: Владимир55   (04.04.2008 в 17:03)
 

приведение к типу string

   
 
 автор: Atheist   (04.04.2008 в 17:06)   письмо автору
 
   для: Владимир55   (04.04.2008 в 17:03)
 

> Конструкцию
> if ($ma[$i] !== "")
> я попробовал в первую очередь. Она не срабатывает.

Этого не может быть.

   
 
 автор: Владимир55   (04.04.2008 в 17:08)   письмо автору
 
   для: Atheist   (04.04.2008 в 17:06)
 

"Этого не может быть."

Что же поделать! Проверил еще раз...

   
 
 автор: Atheist   (04.04.2008 в 17:13)   письмо автору
 
   для: Владимир55   (04.04.2008 в 17:08)
 

> Что же поделать! Проверил еще раз...
Пример кода приведи, пожалуйста. Только минимализм: вот переменная, вот значение, вот условие и не тот результат какой ожидался.

   
 
 автор: Front   (04.04.2008 в 17:22)   письмо автору
 
   для: Владимир55   (04.04.2008 в 17:08)
 

Сорри, не туды написал!

   
 
 автор: vbps   (05.04.2008 в 03:11)   письмо автору
 
   для: Владимир55   (04.04.2008 в 14:54)
 

попробуй проверить что это:

is_numeric - число
is_string - строка

   
 
 автор: KPETuH   (08.04.2008 в 09:07)   письмо автору
 
   для: Владимир55   (04.04.2008 в 14:54)
 

попробуйте
if (!empty($ma[$i]))
если я конечно правильно понял задачу...

   
 
 автор: mechanic   (08.04.2008 в 09:42)   письмо автору
 
   для: KPETuH   (08.04.2008 в 09:07)
 

боюсь неправильно.. 0 не должен удовлетворять условию, а в случае с empty() - удовлетворит..
в условии задачи - найти только пустые строки
впрочем, товарищ уже нашел что искал - (string) ...

   
 
 автор: KPETuH   (08.04.2008 в 09:48)   письмо автору
 
   для: mechanic   (08.04.2008 в 09:42)
 

задача как раз найти не пустые + не содержащие 0

   
 
 автор: Atheist   (08.04.2008 в 09:51)   письмо автору
 
   для: KPETuH   (08.04.2008 в 09:48)
 

Кретин, empty считает за пустое значение и ноль и даже, если не ошибаюсь, пробельные символы.

   
 
 автор: KPETuH   (08.04.2008 в 14:45)   письмо автору
 
   для: Atheist   (08.04.2008 в 09:51)
 

как раз это нам и надо я так понимаю...

   
 
 автор: KPETuH   (08.04.2008 в 09:55)   письмо автору
 
   для: Владимир55   (04.04.2008 в 14:54)
 

так же можно использовать перебор элементов с помощью foreach и проверять на наличие 0

з.ы. вы я так понял перебираете с помощью for...

   
 
 автор: Atheist   (08.04.2008 в 10:00)   письмо автору
 
   для: KPETuH   (08.04.2008 в 09:55)
 

Цикл тут не при чем.

   
 
 автор: KPETuH   (08.04.2008 в 10:03)   письмо автору
 
   для: Atheist   (08.04.2008 в 10:00)
 

ну ну

   
 
 автор: Atheist   (08.04.2008 в 10:07)   письмо автору
 
   для: KPETuH   (08.04.2008 в 10:03)
 

То есть ты обосновать свою позицию можешь?

   
 
 автор: KPETuH   (08.04.2008 в 10:54)   письмо автору
 
   для: Atheist   (08.04.2008 в 10:07)
 

что тут обосновывать? человек делает выборку из масиива перебирая все значения циклом for, ему требуется отсечь несуществущие элементы массива + содержащие 0, если он будет использовать foreach то несуществующие элементы массива будут отсекаться автоматом, а если он сделает еще и проверку на 0 то и они будут отсекаться... что тут непонятного?

   
 
 автор: mechanic   (08.04.2008 в 11:06)   письмо автору
 
   для: KPETuH   (08.04.2008 в 10:54)
 

о, весьма интересно!
т.е. код for($i =0, $n = count($arr); $i < $n; $i++) {} и код foreach($arr as $k => $v) {} делают разное кол-во циклов??
пацталом..

   
 
 автор: KPETuH   (08.04.2008 в 11:13)   письмо автору
 
   для: mechanic   (08.04.2008 в 11:06)
 

переберите вот такой массив
$n=array(1=>1,2=>2,4=>"",5=>4,6=>0,7=>'rt');
замерьте количество итераций...

   
 
 автор: mechanic   (08.04.2008 в 11:23)   письмо автору
 
   для: KPETuH   (08.04.2008 в 11:13)
 

хм..

<?php
$n=array(1=>1,2=>2,4=>"",5=>4,6=>0,7=>'rt');
$i=0;
foreach($n as $k=>$v) {
$i++;
}
echo $i . '<br>';

$i=0;
for($j=0, $m=count($n); $j<$m; $j++) {
$i++;
}
echo $i . '<br>';
?>

РЕЗУЛЬТАТ:
6
6


что я делаю не так?

   
 
 автор: KPETuH   (08.04.2008 в 11:25)   письмо автору
 
   для: mechanic   (08.04.2008 в 11:23)
 

не забудьте еще вывести и сами элементы массива, думаю поймете...

только выводите каждый в новой строке....

   
 
 автор: mechanic   (08.04.2008 в 11:33)   письмо автору
 
   для: KPETuH   (08.04.2008 в 11:25)
 

нет.. была просьба замерить кол-во итераций.. я замерил

   
 
 автор: mechanic   (08.04.2008 в 11:31)   письмо автору
 
   для: mechanic   (08.04.2008 в 11:23)
 

в общем я понял что имелось в виду..
что индексы массива могут не быть равномерно инкрементированы и нельзя слепо обратиться к элементу так: $arr[$i], потому что ключа $i может не быть.. впрочем это относится и к ассоциативным массивам, for() для них не оч.хорошо подходит
однако вспомним, с чего пошла эта дискуссия.. ах да, мы искали пустые ЗНАЧЕНИЯ.. ключи, надо полагать, были от нуля и до какого то числа, без "провалов"..
ваше замечание про "отсекание несуществующих элементов" относится с ключам, и вообще стоит заметить, что на самом то деле ничего нигде не отсекается, массивы как были в своем первозданном виде, так и останутся, а проблема for() в том, что она позволяет нормально работать только с массивами, ключи которых представляют собой арифметическую последовательность от 0 и далее..
вообще я for() уже давно не юзаю

   
 
 автор: KPETuH   (08.04.2008 в 11:33)   письмо автору
 
   для: mechanic   (08.04.2008 в 11:31)
 

цитирую топикстартера

а некоторые элементы массива могут отсутствовать

   
 
 автор: Atheist   (08.04.2008 в 14:55)   письмо автору
 
   для: mechanic   (08.04.2008 в 11:31)
 

> вообще я for() уже давно не юзаю
Ну это говорит лишь о некомпетентности, ибо для разных задач есть разные инструменты и for - простейший цикл, который есть во многих языках программирвония (пусть и называется иногда по-другому). К массивам этот цикл не имеет отношения вообще.

   
 
 автор: mechanic   (08.04.2008 в 16:49)   письмо автору
 
   для: Atheist   (08.04.2008 в 14:55)
 

> Ну это говорит лишь о некомпетентности
и больше ни о чем? тогда видимо это длинное слово относится и к вам тоже
зы. не помню, чтоб утверждал об отношении for() к массивам

   
 
 автор: slawik   (08.04.2008 в 19:01)   письмо автору
 
   для: Владимир55   (04.04.2008 в 14:54)
 

А функцией isset() никто не пробовал пользоватся? :)

   
 
 автор: Хулиган   (08.04.2008 в 19:41)   письмо автору
 
   для: slawik   (08.04.2008 в 19:01)
 

isset() не даёт информации ни о типе, ни о содержимом переменной
$a = 0;
$a = "";
$a = "aaa";

Во всех случаях результатом isset будет true

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования