|
|
|
| как делается, как здесь http://moscowroma.com/allfactories/ | |
|
|
|
|
|
|
|
для: Bvz
(19.01.2010 в 11:57)
| |
<?
$arr = array(
'A' => array(
'ACCADEMIA',
'AEMME ITALIA',
'ALBERTA SALOTTI'
),
'B' => array(
'B.M. STYLE',
'BACCI'
)
);
foreach ( $arr as $letter => $list ) {
print '<h2>'.$letter.'</h2>';
foreach ( $list as $entry ) {
print $entry.'<br>';
}
}
|
| |
|
|
|
|
|
|
|
для: Саня
(19.01.2010 в 12:16)
| | а если все фабрики в бд забиты | |
|
|
|
|
|
|
|
для: Bvz
(19.01.2010 в 12:33)
| | Значит выбирайте из базы все имена и формируете массив какой я показал. Отрезать первую букву можно функцией substr(). | |
|
|
|
|
|
|
|
для: Саня
(19.01.2010 в 12:38)
| | а есть ли функция, которая работает с буквами латинского алфавита? | |
|
|
|
|
|
|
|
для: Bvz
(19.01.2010 в 12:54)
| | А которая работает с буквами русского есть? | |
|
|
|
|
|
|
|
для: Саня
(19.01.2010 в 12:38)
| | Не надо так делать. Есть для этого более другой способ:
| |
|
|
|
|
|
|
|
для: Николай2357
(19.01.2010 в 16:32)
| | А как Вы по такой хреновине индексы строить собираетесь? | |
|
|
|
|
|
|
|
для: Loki
(19.01.2010 в 16:37)
| | Ага, окарал.((( Спутал с поиском. Просто только что такой делал и навеяло.
Прошу пардона. | |
|
|
|
|
|
|
|
для: Саня
(19.01.2010 в 12:16)
| | сделал так, получился такой массив
Array
(
[A] => Array
(
[0] => Array
(
[id] => 1
[published] => 1
[name] => Abhika
[url] => www.abhika.it
[main] => 0
[letter] => A
)
и т.д.
|
не могу понять как его вывести теперь по принципу?
А
Abhika и т.д.
В | |
|
|
|
|
|
|
|
для: Bvz
(20.03.2010 в 11:01)
| |
<?php
// входной массив
$arr = Array
(
'A' => Array
(
'0' => Array
(
'id' => 1 ,
'published' => 1 ,
'name' => 'Abhika' ,
'url' => 'www.abhika.it' ,
'main' => 0 ,
),
'1' => Array
(
'id' => 2 ,
'published' => 1 ,
'name' => 'Abhikdsfdsfsdfdsa' ,
'url' => 'www.abhika.it' ,
'main' => 0 ,
)
),
'B' => Array
(
'0' => Array
(
'id' => 1 ,
'published' => 0 , // неопубликованный
'name' => 'Bbhika' ,
'url' => 'www.abhika.it' ,
'main' => 0 ,
),
'1' => Array
(
'id' => 2 ,
'published' => 1 ,
'name' => 'Bbhikdsfdsfsdfdsa' ,
'url' => 'www.abhika.it' ,
'main' => 0 ,
)
),
);
// код вывода
foreach ($arr as $key_0 => $value_0) {
echo $key_0, ':<br>';
foreach ($value_0 as $key_1 => $value_1) {
if (!$value_1['published']) continue; // неопубликованные пропускаем
echo $value_1['id'], ' :: ', $value_1['name'], '<br>';
}
}
?>
|
Результат:
A:
1 :: Abhika
2 :: Abhikdsfdsfsdfdsa
B:
2 :: Bbhikdsfdsfsdfdsa
|
| |
|
|
|
|
|
|
|
для: neadekvat
(20.03.2010 в 11:45)
| | СПАСИБИЩЕ!!!
а вы можете подробнее разписать почему так сделалаи? | |
|
|
|
|
|
|
|
для: Bvz
(20.03.2010 в 12:00)
| | В каком смысле "почему"? о_О | |
|
|
|
|
|
|
|
для: neadekvat
(20.03.2010 в 12:02)
| | ну описать логику, что делается и для чего? | |
|
|
|
|
|
|
|
для: Bvz
(20.03.2010 в 14:58)
| | Что именно вам не понятно? Там 5 строчек кода и только одна функция.. | |
|
|
|
|
|
|
|
для: Bvz
(19.01.2010 в 11:57)
| | мб что-то типа
<?php
while($array = mysql_fetch_assoc($query)) {
$word = $array['name'];
$char = substr($word, 1);
$arr[$char][] = $word;
}
|
где $word - название чего-то там.
таким образом у вас будет массив $arr..а дальше - сортируете по алафвиту, и как Саня показал. | |
|
|
|
|
|
|
|
для: neadekvat
(19.01.2010 в 17:33)
| | Ну а если отсортированный запрос и сразу вывод? | |
|
|
|
|
|
|
|
для: sim5
(19.01.2010 в 17:57)
| | Не совсем понял, что вы имеете в виду | |
|
|
|
|
|
|
|
для: neadekvat
(19.01.2010 в 20:03)
| | Я так понимаю, что в базе есть записи от А до Я, и их надо вывести под этими литерами. Значит получаем эти отсортированные записи, беря первую литеру каждой группы, а под ней сами записи, и все это непосредственно в цикле while. | |
|
|
|
|
|
|
|
для: sim5
(19.01.2010 в 20:52)
| | Ну так в том и сложность, я думаю, чтобы найти конец группы | |
|
|
|
|
|
|
|
для: neadekvat
(19.01.2010 в 21:01)
| | Зачем искать конец группы? | |
|
|
|
|
|
|
|
для: sim5
(19.01.2010 в 21:02)
| | Ну, если мы вытаскиваем все записи из бд, то надо определить, где начало группы слов, начинающихся на определенную букву, и где её конец.
Или я вас недопонял? | |
|
|
|
|
|
|
|
для: neadekvat
(19.01.2010 в 21:21)
| | Все просто - само определится :)
Ну у вас ресурс отсортированный, то есть здесь не будет "подвоха", все по порядку. Устанавливаем вне цикла переменную А, которая изначально имеет пустое значение.
В цикле проверяем:
если первая литера значения записи не равна А, то присваиваем А эту литеру, а также выводим ее, плюс выводим запись,
иначе выводим запись.
Все. | |
|
|
|
|
|
|
|
для: sim5
(19.01.2010 в 21:25)
| | Ну, с одной буквой, вот так:
<?php $a = '';
// запрос, пусть $char - первая буква, $word - все слово
if ($a == 'A') {
echo $word;
} else {
$a = 'A';
echo $word;
}
|
Вы так имеете в виду? | |
|
|
|
|
|
|
|
для: neadekvat
(19.01.2010 в 21:34)
| | Я понимаю, что нужно получить такое:
<?
$a = array('aa1','aa2','aa3','bb1','bb2','bb3');
$w = '';
for($i=0; $i<count($a); $i++){
if ($w != substr($a[$i],0, 1)) {
print substr($a[$i],0, 1). "<BR> " . $a[$i] . "<BR>";
$w=substr($a[$i],0, 1);
} else print " " . $a[$i] . "<BR>";
}
|
| |
|
|
|
|
|
|
|
для: sim5
(19.01.2010 в 21:39)
| | Это при условии, что у нас есть массив $a, а если его нет, т.е. его опять же нужно составлять, вытаскивая значения из базы, получается так? | |
|
|
|
|
|
|
|
для: neadekvat
(19.01.2010 в 21:53)
| | Если массива нет, то и выводить ничего не надо, а отсортированный ресур полученный запросом из базы, чем отличается от массива в плане вывода? | |
|
|
|
|
|
|
|
для: sim5
(19.01.2010 в 22:01)
| | Ну, например, записи в бд:
Арбуз
Азбука
Арка
Аккордеон
Басня
Башня
Башмак
Бур
Весна
Ветер
Замок
Черкизон
Пусть $query - это запрос, который выводит эти слова.
Как вы отсортируете это так, чтобы было
А
Арбуз
Азбука
Арка
Аккордеон
Б
Басня
Башня
Башмак
Бур
И т.д.
Если бы у нас был массив array('А', 'Б', 'В', 'З', 'Ч') - тогда все ясно
Но ведь его нет, надо узнать, какие буквы в принципе есть | |
|
|
|
|
|
|
|
для: neadekvat
(19.01.2010 в 22:10)
| | И чем строки в ресурсе: Арбуз, Азбука, Арка, Аккордеон, Басня, Башня, Башмак, Бур, Весна..... отличается от явного указанного массива: Арбуз, Азбука, Арка, Аккордеон.... ?
Зачем вспомогательный массив (А,Б,В....)?
Зачем предварительно узнавать какие буквы есть? | |
|
|
|
|
|
|
|
для: sim5
(19.01.2010 в 22:13)
| | Допёр.
Пойду-ка спать :о) | |
|
|
|
|
|
|
|
для: neadekvat
(19.01.2010 в 22:21)
| | вот так
<?php
// Формируем запрос на извлечение первых
// букв товарных позиций
$fsql = "SELECT SUBSTRING(name,1,1) AS letter FROM `factory` GROUP BY letter ORDER BY letter";
$fletter = mysql_query($fsql);
if(!$fletter) exit(mysql_error());
// Если имеется хотя бы одна запись
// выводим её
if(mysql_num_rows($fletter) > 0)
{
while($factory = mysql_fetch_assoc($fletter))
{
echo "<p class=\"letter\">".$factory[letter]."</p>";
// Выводим товарные позиции
$nsql = "SELECT * FROM `factory` WHERE SUBSTRING(name,1,1) = '$factory[letter]'";
$name = mysql_query($nsql);
if(!$name) exit(mysql_error());
// Если в текущем каталоге имеется хотя бы
// одна товарная позиция выводим её
if(mysql_num_rows($name) > 0)
{
while($fname = mysql_fetch_assoc($name))
{
echo $fname[name]."<br />";
}
}
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Bvz
(29.01.2010 в 12:13)
| | Ну во-первых, а не накладно ли? | |
|
|
|
|
|
|
|
для: sim5
(29.01.2010 в 12:25)
| | в смысле накладно? | |
|
|
|
|
|
|
|
для: Bvz
(29.01.2010 в 12:35)
| | То есть не понимаем что такое производительность? | |
|
|
|
|
|
|
|
для: sim5
(29.01.2010 в 12:41)
| | не совсем, только догадываюсь :)
а как лучше сделать, в какую сторону копать? | |
|
|
|
|
|
|
|
для: Bvz
(29.01.2010 в 12:43)
| | Ну если о копать, то копают вниз и в нужном направлении, куда вам надо, я не знаю.
А вот если о выводе списка, то достаточно одного запроса. И об этом рассказывалось выше. Почему вы "копаете" именно так, трудно предположить даже, видимо вы о всем только догадываетесь, а этого явно мало. | |
|
|
|
|
|
|
|
для: sim5
(29.01.2010 в 12:46)
| | да согласен я только учусь, попробую одним запросом сделать, это JOIN правильно? | |
|
|
|
|
|
|
|
для: Bvz
(29.01.2010 в 12:51)
| | А вы как думаете?
Учиться применять инструменты - да, думать отвлеченно - вы должны уметь. РНР не догма, это инструмент, всего лишь.
Как бы вы поступили, решая эту задачу карандашом на бумаге? У вас есть список, и чтобы написать его упорядоченно, что вы сделаете? Поступите вполне естественно - по алфавиту.
Что вам нужно будет для того, чтобы перед каждым выводом списка начинающегося с каждой литерой алфавита, вывести эту литеру? Просто посмотреть - прописывали вы ли ее уже.
А чего будет достаточно для того, чтобы понять - пора ли писать новую литеру? Просто посмотреть - первая буква следующего слова та же что и прописанная литера или нет.
Вот этого нет в учебниках РНР, этому они вас не научат. Это способность к мышлению, базирующаяся на вполне естественном представлении нашем.
И как теперь все это сделать с помощью инструментов РНР? | |
|
|
|
|
|
|
|
для: sim5
(29.01.2010 в 13:12)
| | спасибо, пошел рисовать :)
а где научиться правильно мыслить? | |
|
|
|
|
|
|
|
для: Bvz
(29.01.2010 в 13:27)
| | Правильно мыслить учит только Партия! ;-)
А развивать мышление помогают книги. | |
|
|
|
|
|
|
|
для: sim5
(29.01.2010 в 13:36)
| | какие? | |
|
|
|
|
|
|
|
для: Bvz
(29.01.2010 в 13:42)
| | Самые разнообразные - чем больше в вас "любопытства", тем лучше. | |
|
|
|
|
|
|
|
для: sim5
(29.01.2010 в 13:47)
| | Супер - Спасибо!!!
а как правильно читать? | |
|
|
|
|
|
|
|
для: Bvz
(29.01.2010 в 13:52)
| | Слева на право, сверху вниз :)
Ставьте перед собой простые задачи и учитесь находить наиболее выгодные решения. В конце концов можете купить конструктор Лего, кубик Рубика, решать ребусы и другие задачки в журнале Мурзилка :)
Интересуйтесь жизнью, в ней много интересного, пробуйте, анализируйте. Театр, книги, прекрасная музыка, все это для творческого развития личности, а творческий подход пригодится во всех сферах деятельности. Математика, геометрия, физика, это дисциплины, которые развивают логическое мышление необходимое в программировании.
Если у вас есть жадность к познанию, значит все получится. | |
|
|
|
|
|
|
|
для: Bvz
(29.01.2010 в 13:52)
| | Если книжка на русском - то слева направо, сверху вниз.
Если книжка на арабском - справа налево, сверху вниз.
Если в книжке японские/китайские иероглифы, то частенько читать надо читать сначала сверху вниз, а потом уже слева направо. | |
|
|
|
|
|
|
|
для: sim5
(29.01.2010 в 13:12)
| | Рисовать сложные запросы/алгоритмы на бумаге - +1
Порой сложно в голове представить это, особенно после энного числа за работой | |
|
|
|
|
|
|
|
для: neadekvat
(29.01.2010 в 14:24)
| | Ну собственно блок-алгоритмы не я придумал, они в учебниках для "прогеров" всегда имеются - картинки с прямоугольниками и ромбиками :) | |
|
|
|
|
|
|
|
для: sim5
(29.01.2010 в 14:52)
| | Я до них еще не дошел)) | |
|
|
|