Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Отсортировать массив в нужном порядке
 
 автор: TetRiska   (12.10.2009 в 00:45)   письмо автору
 
 

Всем привет! Имею массив. В нем допустим содержится такая информация и выводится в таком порядке:
* Заполните все поля.
* Неподходящий диапазон цены в поле До:.
* Произошел сбой в загрузке картинки. Повторите загрузку.
* Размер файла превышает 2 мегабайта.
* Тип файла запрещен к загрузке. Загружайте .jpg и .jpeg.


Записываю в массив так:
if (is_uploaded_file($_FILES['uploads']['tmp_name']) == false)
            $array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Произошел сбой в загрузке картинки. Повторите загрузку.</div></td></tr>";

Обрабатываю так:
function error_info($array_error) 
{
if(!empty($array_error) )
$error = implode("",$array_error); 
    return $error; 
}

Вывожу так:
<?php echo error_info(@array_unique($array_error)) ?>

Как мне сортировать не по алфавиту, а как мне захочется? Пересмотрел ф-ции сортировок, не вышло :( Прошу помощи.

  Ответить  
 
 автор: neadekvat   (12.10.2009 в 00:56)   письмо автору
 
   для: TetRiska   (12.10.2009 в 00:45)
 

Записывайте ошибки в строку таким образом:
$error .= '<li>Ошибка такая-то<li>';
А выводите таким:
echo '<ul>'.$error.'</ul>';
Тогда с массивами мучаться не надо будет.
А то, в каком порядке ошибки будут выводится - просто сам код обработки перемещайте вверх-вниз (не строку переносить, а местами код менять), тогда строка $error склеется в другой последовательности, нужной фам.

  Ответить  
 
 автор: TetRiska   (12.10.2009 в 01:08)   письмо автору
 
   для: neadekvat   (12.10.2009 в 00:56)
 

нет нужно работать с массивом, если интересно могу рассказать почему, но это много текста :)

  Ответить  
 
 автор: neadekvat   (12.10.2009 в 08:33)   письмо автору
 
   для: TetRiska   (12.10.2009 в 01:08)
 

Интересно, почему? Попробуйте вкратце :)
Да и с массивами то же самое можно сделать
Вместо
if...{
$array_errors[] = 'Ошибка один';
}

if...{
$array_errors[] = 'Ошибка два';
}


напишите

if...{
$array_errors[] = 'Ошибка два';
}

if...{
$array_errors[] = 'Ошибка один';
}


Если же так не сделать, а вам все-таки хочется сортировать вручную, то можно извратиться, например, так: ошибки вначале строки имеют букву латинского алфавита:
$array_errors[] = 'bОшибка два';
$array_errors[] = 'aОшибка один';
с помощью этих букв вы от a (англ) к z можете определить порядок, это нам привычно (писать типа а) лала. б) ляля )
Затем сортируете массив по алфавиту, а при выводе ошибки обрезаете первые буквы.

  Ответить  
 
 автор: TetRiska   (12.10.2009 в 13:37)   письмо автору
 
   для: neadekvat   (12.10.2009 в 08:33)
 

сортировка по алфавиту тоже не подходит :) и кратко изложить тоже не выйдет :)
приложу форму http://i016.radikal.ru/0910/d8/3b8f5e4bb991.jpg и опишу всю суть происходящего

Как видно на форме есть чекбокс, который дает понимать программе как добавлять и загружать данные на сервер. Если чекбокс не включен, то добавляется изделие с 1-й фотографией, а если включен, нам предоставится право добавить поля и соответственно загрузить много фотографий. Прилагаю хтмл код этих 2-х полей загрузки файлов:
<tr>
    <td><div style="margin:0 0 5px 3px">Фото:</div></td> 
    <td><div style="margin:0 0 5px 3px"><input name="uploads" type="file" size="30" /><input id="count" type="hidden" value="<?php echo count($_FILES["att"]["name"]) ?>" /></div></td>
  </tr>
   <tr>
    <td><div style="margin:0 0 5px 3px">Доп. фото:</div></td>
    <td><div style="margin:0 0 5px 3px"><input id="file" type="file" size="30" name="att[]" <?php if($_POST['checkbox'] != "on") echo "disabled"?> > <input id="minus" type="button" value=" - " onclick="dropFile(this);" <?php if($_POST['checkbox'] != "on" || !empty($_POST)) echo "disabled"?> > <input id="plus" type="button" value=" + " onclick="addFile(this);" <?php if($_POST['checkbox'] != "on") echo "disabled"?> ></div></td>
</tr>

Далее приложу обработчик:

1. если чекбокс активирован
<?php
if(!empty($_POST['checkbox']))
    {
        if (
is_uploaded_file($_FILES['uploads']['tmp_name']) == false)
            
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Произошел сбой в загрузке картинки. Повторите загрузку.</div></td></tr>";
    
        if(
$_FILES["uploads"]["error"] == 1)
            
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Размер файла превышает 2 мегабайта.</div></td></tr>";
        
        if(
$_FILES["uploads"]["error"] == 4)
            
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Выберите картинку.</div></td></tr>";

        if(
$_FILES["uploads"]["type"] != "" && $_FILES["uploads"]["type"] != "image/jpeg" && $_FILES["uploads"]["type"] != "image/pjpeg")
            
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Тип файла запрещен к загрузке. Загружайте <b>.jpg</b> и <b>.jpeg</b>.</div></td></tr>";
        if(
$_POST["name_radio"] == "name1")
        {
            if(
$_POST["title"] == "" || $_POST["text"] == "" || $_POST["price"] == "")
                
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Заполните все поля.</div></td></tr>";
        }
        if(
$_POST["name_radio"] == "name2")
        {
            if(
$_POST["title"] == "" || $_POST["text"] == "" || $_POST["price1"] == "" && $_POST["price2"] == "")
                
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Заполните все поля.</div></td></tr>";        
            if(
$_POST["price1"] == "" && $_POST["price2"] != "")
                
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Неподходящий диапазон цены в поле <u><b>До:</b></u>.</div></td></tr>";
        }
        
        for(
$p 0$p count($_FILES['att']['name']); $p++)
        {
            if (
is_uploaded_file($_FILES['att']['tmp_name'][$p]) == false)
                
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Произошел сбой в загрузке картинки. Повторите загрузку.</div></td></tr>";
    
            if(
$_FILES["att"]["error"][$p] == 1)
                
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Размер файла превышает 2 мегабайта.</div></td></tr>";
        
            if(
$_FILES["att"]["error"][$p] == 4)
                
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Выберите картинку.</div></td></tr>";

            if(
$_FILES["att"]["type"][$p] != "" && $_FILES["att"]["type"][$p] != "image/jpeg" && $_FILES["att"]["type"][$p] != "image/pjpeg")
                
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Тип файла запрещен к загрузке. Загружайте <b>.jpg</b> и <b>.jpeg</b>.</div></td></tr>";
        }
    
        if(
count($array_error) != 0)
        {
            
$table_h "<table class='scriptcode' width='100%' border='0' cellspacing='0' cellpadding='0'><tr><td align='center'><b>Внимание!!!</b></td></tr><tr><td>";
            
$table_f "</td></tr></table>";
        }
        if(
count($array_error) == 0)
        {
            include(
"dmn/modules/addcommodity/add_photo.php");
            include(
"dmn/modules/addcommodity/add_dphoto.php");
            
header("location: ".DOMEN."/adminpanel/addcommodity");
        }
    }
?>

2. если чекбокс не активирован в принципе повтор первой части
<?php
else
    {
        if (
is_uploaded_file($_FILES['uploads']['tmp_name']) == false)
            
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Произошел сбой в загрузке картинки. Повторите загрузку.</div></td></tr>";
    
        if(
$_FILES["uploads"]["error"] == 1)
            
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Размер файла превышает 2 мегабайта.</div></td></tr>";
        
        if(
$_FILES["uploads"]["error"] == 4)
            
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Выберите картинку.</div></td></tr>";

        if(
$_FILES["uploads"]["type"] != "" && $_FILES["uploads"]["type"] != "image/jpeg" && $_FILES["uploads"]["type"] != "image/pjpeg")
            
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Тип файла запрещен к загрузке. Загружайте <b>.jpg</b> и <b>.jpeg</b>.</div></td></tr>";
        if(
$_POST["name_radio"] == "name1")
        {
            if(
$_POST["title"] == "" || $_POST["text"] == "" || $_POST["price"] == "")
                
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Заполните все поля.</div></td></tr>";
        }
        if(
$_POST["name_radio"] == "name2")
        {
            if(
$_POST["title"] == "" || $_POST["text"] == "" || $_POST["price1"] == "" && $_POST["price2"] == "")
                
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Заполните все поля.</div></td></tr>";        
            if(
$_POST["price1"] == "" && $_POST["price2"] != "")
                
$array_error[] = "<tr><td colspan='2'><div style='margin-top:5px; font-size:15px; color:gray'><font color='red'>*</font>&nbsp;Неподходящий диапазон цены в поле <u><b>До:</b></u>.</div></td></tr>";
        }
        
        if(
count($array_error) != 0)
        {
            
$table_h "<table class='scriptcode' width='100%' border='0' cellspacing='0' cellpadding='0'><tr><td align='center'><b>Внимание!!!</b></td></tr><tr><td>";
            
$table_f "</td></tr></table>";
        }
        if(
count($array_error) == 0)
        {
            include(
"dmn/modules/addcommodity/add_photo.php");
            
header("location: ".DOMEN."/adminpanel/addcommodity");
        }
    }
?>

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

  Ответить  
 
 автор: neadekvat   (12.10.2009 в 16:37)   письмо автору
 
   для: TetRiska   (12.10.2009 в 13:37)
 

Многабукфакода..
Я не понимаю, зачем разделять код на две такие большие части?
Сделайте обработку так:
Категория
Фото
если чекбокс на доп фото нажат, то загружаем доп поля
название
описания
и тд

И назовите, какой порядок вы хотите вывода ошибок.

  Ответить  
 
 автор: Николай2357   (12.10.2009 в 21:42)   письмо автору
 
   для: TetRiska   (12.10.2009 в 13:37)
 

Подход достаточно кривой, но выход из этого положения прост, как три копейки. Проставь ключи и не нужно будет сортировать ничего. Они просто перезапишутся.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования