Ka4_0k
18.03.2009 - 22:56
В базе данных есть таблица, из неё, точнее из одной ячейки выбираются числа типа 1_02, 3_23 и т.д.
Вообщем нужно чтобы обрезалось и выбиралась только первая цифра. Это я сделал:
Цитата |
$a = substr($a, 0, 1); |
А дальше у меня ступор: Мне неизвестно какие буду последние цифры и, соответственно количество едениц, двоек и т.д., а мне нужно сосчитать только количество первых чисел. Тоесть так
Цитата |
1_01 1_02 1_03 1_04 2_01 2_02 2_03 |
Результат вот этого должен быть 2.
Если не совсем понятно, напишите где не понятно и пожалуйста помогите! Можно только алгоритм!
Спустя 10 минут, 32 секунды (18.03.2009 - 22:06) sergeiss написал(а):
Объясняю алгоритм.
1. Для начала делаешь цикл по всем своим данным.
2. В цикле используешь explode() для разделения строки на элементы, с разделителем "знак подчеркивания", и все первые элементы записываешь в новый массив. В итоге получаешь массив, состоящий только из первых цифр.
3. А дальше ищем количество уникальных элементов массива... Или свою функцию делаешь, или ищещь среди функций работы с массивами. Например, array_count_values
Спустя 13 минут, 16 секунд (18.03.2009 - 22:20) Ka4_0k написал(а):
Огромное спасибо!! Всё заработало!
kirik, почему ты удалил пост? Мне помогла именно array_unique()!
Спустя 14 минут, 14 секунд (18.03.2009 - 22:34) kirik написал(а):
Цитата (Ka4_0k @ 18.03.2009 - 14:20) |
kirik, почему ты удалил пост? Мне помогла именно array_unique()! |
Алгоритм
sergeiss'а логичнее в любом случае.
Удалил, чтобы не путать тебя.
Спустя 5 минут, 19 секунд (18.03.2009 - 22:39) Ka4_0k написал(а):
Возникла другая проблема. Сделал всё вот так:
Цитата |
$sezon = array();
$result = mysql_query("SELECT * FROM data"); $myrow = mysql_fetch_array($result); while(mysql_fetch_array($result)) { $result2 = mysql_query("SELECT * FROM on WHERE cat = '$myrow[cat]'"); $myrow2 = mysql_fetch_array($result2);
while(mysql_fetch_array($result2)) {$a = $myrow['epizod']; $a = substr($a, 0, 1); $sezon[] = $a;}; }; $q = count($sezon); echo $q; $sezon = array_unique($sezon); foreach($sezon AS $t) {print $t."<br>";}; |
Результат просто число 200 на экране:( Как я понимаю это число элементов массива. 200 это что максимум?
Спустя 6 минут, 50 секунд (18.03.2009 - 22:46) sergeiss написал(а):
АхрИнеть
У тебя несколько ошибок в коде; я его поправил и немного упростил:
PHP |
$sezon = array();
$result = mysql_query("SELECT * FROM data");
while( $myrow = mysql_fetch_array($result) ) { $result2 = mysql_query("SELECT * FROM on WHERE cat = '$myrow[cat]'");
while( $myrow2 = mysql_fetch_array($result2) ) { $sezon[] = substr( $myrow['epizod'], 0, 1); } }
$q = count($sezon); echo $q.'<br>'; $sezon = array_unique($sezon); foreach($sezon AS $t) {print $t."<br>";}; |
И учти, что код не будет работать, если у тебя будет двузначное число в начале строки, перед знаком подчеркивания; в этом случае надо будет explode использовать, а не substr.
PS. А число 200 у тебя образовывалось из-за неправильного вывода (после печати $q) не было перевода строки.
Спустя 9 минут, 40 секунд (18.03.2009 - 22:56) Ka4_0k написал(а):
Огромное спасибо, sergeiss!!! Только теперь мне вывело только количество элементов массива. На этот раз правильно 719. Больше ничего я не увидел. Нажав в браузере исходный код страници, я увидел такое
Тоесть, оно из вот этого
Цитата |
foreach($sezon AS $t) {print $t."<br>";}; |
Выводит только <br> и всё...
Спустя 15 минут, 1 секунда (18.03.2009 - 23:11) sergeiss написал(а):
Сделай контрольную распечатку, добавь к внутреннему циклу одну строку, и обрати внимание на то, что тут была одна опечатка, внутри substr использовался не тот массив
. И заодно замени оба
mysql_fetch_array на
mysql_fetch_assoc - в данном случае это принципиально, т.к. ты используешь результат именно в ассоциативном виде.
PHP |
while( $myrow2 = mysql_fetch_assoc($result2) ) { echo $myrow2['episod']."<br>"; $sezon[] = substr( $myrow2['epizod'], 0, 1); } |
Спустя 11 минут, 14 секунд (18.03.2009 - 23:22) Ka4_0k написал(а):
Контрольная распечатка всё правильно выдала, а вот в конце, при распечатке массива $sezon у меня просто вышло:
Всё. Проблема решена:) Нужно было изменить
PHP |
$sezon[] = substr( $myrow['epizod'], 0, 1); |
на
PHP |
$sezon[] = substr( $myrow['epizod'], 1, 2); |
Спасибо ещё раз, sergeiss!
Спустя 9 часов, 49 минут, 37 секунд (19.03.2009 - 09:12) sergeiss написал(а):
Я тут с утра посмотрел "на свежую голову"... Можно даже еще проще сделать один момент
Не надо использовать substr!!!
PHP |
$sezon[]=intval( $myrow['episod'] ); // будут читаться цифры с начала и до первого символа, не являющегося цифрой |
_____________
-Oh My God! They Killed Kenny!
-You Bastards!