Массивы. Подскажиет про %

fender

Новичок
Массивы. Подскажите про %

никак не могу найти в мане
видел где-то что можно делать примерно следущее:
PHP:
$d = array(); 
if($d%4) // типа 4-й элемент
где про это почитать?
поиск по форуму тоже к сожалению не помог
хотя помню что было что-то ....
 

Фанат

oncle terrible
Команда форума
во-первых, оператор получения остатка от деления не имеет НИКАКОГО отношения к массивам.
во-вторых, смотреть в мане, в арифметических операторах.

-~{}~ 07.09.04 15:44:

в-третьих, элемент с индексом 4 находится вот так
$d[4];
о позиуции же элемента в массиве лучше вообще не говорить. это вещь скользкая.
 

fender

Новичок
да,это был бред.
Хотя четность / нечетность элемента можно определить таким образом.

А вот как определить (наилучшим образом) в цикле тот факт, что элемент - последний?

можно конечно что-то типа:
PHP:
for($i=0; $i<sizeof($array); $i++) { 
    if(isset($array[$i+1])) $type = "normal"; 
    else $type = "end";    
}
но как-то не стильно.
 

HEm

Сетевой бобер
$array[sizeof($array)-1]

но помни, что в PHP массивы не обязательно имеют в качестве ключей числовую последовательность, да еще начиная с 0 или 1
 

Фанат

oncle terrible
Команда форума
HEm
все-таки, end тут не очень подходит, я думаю.
она не возвращает ключ, а значения могут дублироваться.
а нам нужен именно ключ.

соответственно, нужн до цикла узнать значение ключа последнего элемента, и с ним при переборе сравнивать.

Как это сделать для асс, не дергая весь массив, я навскидку не припоминаю

-~{}~ 07.09.04 16:17:

Видимо, проще всего для асс сделать по аналогии с нумером.
- посчитать коунт, и внутри цикла вести счечик.
те же два лишних оперейтора.
 

Фанат

oncle terrible
Команда форума
Я же говорил - не дергая весь массив.
мне кажется, что мой способ универсален и нересурсоемок.
разве нет?
 

Sat

Guest
[m]count[/m]

имеешь кол-во элементов.

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

HEm

Сетевой бобер
да в любом случае, имхо, чел не в курсе об ассоциативных массивах, слишком узко очертил он свою задачу

а вот эта конструкция if(isset($array[$i+1])) для данного примера легко заменяется на эту if($i==sizeof($array))
естественно, чтобы каждый раз не высчитывать каунт нужно его пихнуть в отдельную переменную
 

Фанат

oncle terrible
Команда форума
(sizeof($array)-1) только

-~{}~ 07.09.04 16:35:

Sat
И не забывайте, что даже асс массивы, спокойно проходятся по номерам элементов
с этого места поподробнее, плиз
 

lucas

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

Screjet

Новичок
2Фанат,

Для ассоц последний ключ:
PHP:
end($array);
list($key,$val) = each($array);
 

fender

Новичок
Безусловно, проблему я очертил узко (кстати, про ассоц. я в курсе)
но зато сколько инфы получил!
Сэнькс!
 

Sat

Guest
Фанат

PHP:
$ar["first"]="First el";
$ar["fird"]="Fird el";
$ar["forth"]="Fourth el";
$ar["fith"]="Fith el";
$num=count($ar);
for($i=0; $i<$num; $i++) {
  echo $ar[$i];
}
Вот и прошли ассоциативный по номерам...
 

Макс

Старожил PHPClub
Sat
это конечно сделать можно, но не нужно. Хеши придумали для того, чтобы к ним обращались по ключу. Если к ним обращаются по числовым номерам, то почти наверняка это неправильно спроектированная структура данных.
 

Sat

Guest
:) Меня попросили показать, я показал.
Я лично использую имена ключей только в целях читаемости кода. Редко использую имена для передачи какого-либо параметра. (можно вместо двух связанных массивов использовать).
Поэтому ключи я редко трогаю когда просто надо пройти массив. Как было показано в тестах(http://php.spb.ru/php/speed.html) такая конструкция работает намного быстрее чем тот-же самый foreach.

А вот теперь представьте... я захотел отказаться от foreach. Как мне сделать полный проход массива не зная имён его ключей?
 
Сверху