[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с алгоритмом
Ka4_0k
В базе данных есть таблица, из неё, точнее из одной ячейки выбираются числа типа 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 smile.gif

Спустя 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'а логичнее в любом случае. smile.gif Удалил, чтобы не путать тебя.

Спустя 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 написал(а):
АхрИнеть smile.gif

У тебя несколько ошибок в коде; я его поправил и немного упростил:
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. Больше ничего я не увидел. Нажав в браузере исходный код страници, я увидел такое
Цитата
719<br><br>

Тоесть, оно из вот этого
Цитата
foreach($sezon AS $t)
{print $t."<br>";};

Выводит только <br> и всё...

Спустя 15 минут, 1 секунда (18.03.2009 - 23:11) sergeiss написал(а):
Сделай контрольную распечатку, добавь к внутреннему циклу одну строку, и обрати внимание на то, что тут была одна опечатка, внутри substr использовался не тот массив smile.gif. И заодно замени оба mysql_fetch_array на mysql_fetch_assoc - в данном случае это принципиально, т.к. ты используешь результат именно в ассоциативном виде.
PHP
while( $myrow2 mysql_fetch_assoc($result2) )
{
echo 
$myrow2['episod']."<br>";
$sezon[] = substr$myrow2['epizod'], 01);
}

Спустя 11 минут, 14 секунд (18.03.2009 - 23:22) Ka4_0k написал(а):
Контрольная распечатка всё правильно выдала, а вот в конце, при распечатке массива $sezon у меня просто вышло:
Цитата
0
С

Всё. Проблема решена:) Нужно было изменить
PHP
$sezon[] = substr$myrow['epizod'], 01);

на
PHP
$sezon[] = substr$myrow['epizod'], 12);

Спасибо ещё раз, sergeiss!

Спустя 9 часов, 49 минут, 37 секунд (19.03.2009 - 09:12) sergeiss написал(а):
Я тут с утра посмотрел "на свежую голову"... Можно даже еще проще сделать один момент smile.gif
Не надо использовать substr!!!
PHP
$sezon[]=intval( $myrow['episod'] ); // будут читаться цифры с начала и до первого символа, не являющегося цифрой


_____________
-Oh My God! They Killed Kenny!
-You Bastards!
Быстрый ответ:

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