Помогите новичку в написании скрипта :)

xoma

Guest
Помогите новичку в написании скрипта :)

Добрый День.. я еще много не знаю в РНР, но задача такова, что есть текстовый файл http://www.neverlands.ru/rating/clans.txt с информацией по рейтингу кланов в одной игре....я хочу написать скрипт который бы обрабатывая этот файл выводил сам рейтинг кланов который там описаны....я вот пробовал зделать это так..
$baza=file('http://www.neverlands.ru/rating/clans.txt');
$rait=explode("|",$baza,4);
list($skl,$znak,$name,$id)=$rait;
echo $skl,$znak,$name," ",$id;
но ничего не выводится....кроми надписи - array ... =(
если Вам не сложно, помогите пожалуйста...только не надо меня критиковать, лучше обьсните в чем мои ошибки...я ведь только учусь...и еще много не знаю...
 

lucas

Guest
[m]error_reporting[/m](E_ALL) + [m]foreach[/m] ($baza as $line) { ... }

Tor

[m]foreach[/m], блин.
Он для того в PHP и предназначен.
 

pnt

Guest
PHP:
$baza=file('http://www.neverlands.ru/rating/clans.txt');
foreach ($baza as $line)
{
  list($skl,$znak,$name,$id)=explode("|",$line);
  echo $skl,$znak,$name," ",$id;
}
 

lucas

Guest
Так, товарищи-"хошь-код-напишу", теперь-ка избавьтесь от третьего параметра explode.
 

Tor

Новичок
lucas
именно так и следует писать, а не
for($i=0;$i<count($array)...

Так, товарищи-"хошь-код-напишу", теперь-ка избавьтесь от третьего параметра explode
ну, если ты знаешь, как выглядит (и будет выглядеть в дальнейшем) clans.txt, то ты просто молодец
у остальных такой уверенности нет, потому третий параметр остается на своем месте
 

lucas

Guest
Tor

именно так и следует писать, а не
for($i=0;$i<count($array)...
1. Хорошо подумать и почитать хотя бы форум.
2. Изложить свои аргументы.

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

Tor

Новичок
for($i=0;$i<count($array)...
1) в моем варианте функция count() вызывается один раз, ты предлагаешь вызывать ее на каждый елемент массива?
2) почему разработчики phpMyAdmin'a перешли с первого способа на второй (с одним count'ом)?

поставлен он (третий параметр) был туда бездумно, а, следовательно, абсолютно не нужен
молодой человек, у Вас проблемы с логикой
Вы же не задумываетесь, как жевать и переваривать пищу
будете утверждать, то этого делать не надо?
 

lucas

Guest
1) в моем варианте функция count() вызывается один раз, ты предлагаешь вызывать ее на каждый елемент массива?
Да, предлагаю. Контраргументы в студию.

2) почему разработчики phpMyAdmin'a перешли с первого способа на второй (с одним count'ом)?
Не думаю, что этот вопрос должен быть адресован мне, коли я разработчиком phpMyAdmin'а не являюсь. Могу лишь подозревать, что у них есть на то определенные причины, которые ты не замедлишь изложить.

молодой человек, у Вас проблемы с логикой
Зато у меня все в порядке с глазами. Я способен прочитать название последней "колонки" в приведенном файле, предположить формат возможных значений и оценить вероятность присутствия в том поле чего либо, кроме цифр.
 

Tor

Новичок
Да, предлагаю. Контраргументы в студию
аргумент один
ресурсы на хранение одной дополнительной переменной много меньше затрат на вычисление кол-ва элементов в массиве сотни и тысячи раз

если ты не в состоянии этого понять и без тыкания носом, то смысла в продолжении дискуссии я не вижу
 

Kelkos

Сам себе программер
Есть ещё аргумент. (только не знаю в чью пользу) - количество элементов в массиве может изменяться в цикле. %)
 

Tor

Новичок
и что?
во-первых, при обработке результатов запроса к базе кол-во не меняется
во-вторых, менять кол-во элементов в массиве при его обработке - моветон
в-третьих, что мешает изменить значение $c при изменении кол-ва значений?
 

lucas

Guest
1.
ресурсы на хранение одной дополнительной переменной много меньше затрат на вычисление кол-ва элементов в массиве сотни и тысячи раз
Согласен. Суть в том, что вычисление происходит не "сотни и тысячи раз", а лишь однажды -- при изменении количества элементов.

PHP хранит для каждого массива во внутренней структуре поле, содержащее его размер, и count лишь возвращет значение этого поля.

Тем самым, присвоение значения count переменной для последующего ее использования есть нечто на грани прогрессирующей шизофрении, основанное на непонимании реально происходящего.

typedef struct _hashtable {
uint nTableSize;
uint nTableMask;
uint nNumOfElements;
ulong nNextFreeElement;
Bucket *pInternalPointer; /* Used for element traversal */
Bucket *pListHead;
Bucket *pListTail;
Bucket **arBuckets;
dtor_func_t pDestructor;
zend_bool persistent;
unsigned char nApplyCount;
zend_bool bApplyProtection;
#if ZEND_DEBUG
int inconsistent;
#endif
} HashTable;
static int php_count_recursive(zval *array, long mode TSRMLS_DC)
{
long cnt = 0;
zval **element;

if (Z_TYPE_P(array) == IS_ARRAY) {
cnt = zend_hash_num_elements(Z_ARRVAL_P(array));
if (mode == COUNT_RECURSIVE) {
...
}
}
}

return cnt;
}
2. В PHP для итерации через структуры, имеющие хеши (массивы и объекты) еще с самого начала 4-ой версии введен цикл foreach. Именно его и стоит использовать в большинстве случаев (кроме, например, использования доп. методов итераторов), забыв о for, как о страшном сне.

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

-~{}~ 13.07.05 12:34:

во-вторых, менять кол-во элементов в массиве при его обработке - моветон
...или требование (нетривиального) алгоритма.

в-третьих, что мешает изменить значение $c при изменении кол-ва значений?
Больше костылей, хороших и разных! :)
 
Сверху