<![CDATA[ Взываю к духам php-мастеров:) UPD внутри - My Forums]]> https://forums.modx.com/thread/?thread=60944 <![CDATA[&#1089;&#1072;&#1084; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;]]> https://forums.modx.com/thread/60944/php--upd#dis-post-353742
$file = $f;
$action = $modx->documentIdentifier;
global $row_sortir;
$row_id = 1;
$Output =<<<EOD
<form method="post" action="[~[*id*]~]">
     <select name="selectId">       
       <option value="1">по названию</option> 

       <option value="3">по ИФНС</option>
       <option value="4">по дате</option>  
       <option value="5">по цене</option> 
    </select>
<input type="submit" name="submit" value="отсортировать">
</form>
EOD;
echo $Output;

if (isset($_POST["submit"])) {
  $row_id = $_POST["selectId"];
}

// Начало таблицы
$table_start = "<table border=1 cellspacing=0 cellpadding=0 class=price>\n";
echo $table_start;

if ($row_id == 1) {
echo "<colgroup><col class=sort_by></col><col span=5></col></colgroup>";
}
elseif ($row_id == 2) {
echo "<colgroup><col></col><col class=sort_by></col><col span=4></col></colgroup>";
}
elseif  ($row_id == 3) { 
echo "<colgroup><col span=2></col><col class=sort_by></col><col span=3></col></colgroup>";
}
elseif  ($row_id == 4) { 
echo "<colgroup><col span=3></col><col class=sort_by></col><col span=2></col></colgroup>";
}
else { 
echo "<colgroup><col span=4></col><col class=sort_by></col><col></col></colgroup>";
}


echo "\n<tr>\n";




$row = 0; 

$fp = fopen ("$file","r"); // файл открыт

// получаем построчно данные из csv-файла с разделителями  
while ($data = fgetcsv ($fp, 1000, ";")) { 

$counter = count ($data); 
  
    for ($c=0; $c<$counter; $c++) { 
// Первую строчку таблицы выводим как заголовок 
       if ($row == 0) { 
       echo $th = "<th>$data[$c]</th>\n"; 
                      } 
                 else { 
                       
         if ($c == 3) $data[$c] = date_convert ($data[$c]);
         $huy[$row] = $data; // тупо нумеруем массив,построчно
                      } 
                                  }   

$r = $row; 
if ($data['1'] != "$got") $huy[$row] = 0; //по второму столбцу мне сортировка не нужна, я просто отрубаю строчку по критерию
$row++;
} 
                                        
$row_sortir = $row_id;
usort($huy, "sortir");  

// Заканчиваем первую строку в таблице 
$output .= "</tr>\n"; 

for ($cc=0; $cc<$r; $cc++)
{
if ($huy[$cc] == 0)                   {
$output .= "";
                                      }                       
                                 else {
$output .= "<tr>\n"; 
for ($c=0; $c<$counter; $c++) 
{
if ($c == 1) {
$output .= "<td class='".$c."'><strong>".$huy[$cc][$c]."</strong></td>\n";
             }
        else {
$output .= "<td class='".$c."'>".$huy[$cc][$c]."</td>\n";
             }
}
$output .= "</tr>\n";
                                       }
 
}
                                        


$output .= "</table>";

fclose ($fp); 

return $output;

function sortir($a, $b) {
       global $row_sortir;
       return strnatcasecmp($a[$row_sortir-1], $b[$row_sortir-1]);
}

function date_convert($_s) {
     $a = explode('.', $_s);
     if (sizeof($a) != 3) return 'BUEEEEE!!!';
     return trim($a[2]).'-'.trim($a[1]).'-'.trim($a[0]) ;
}
]]>
openagate Aug 12, 2006, 02:06 PM https://forums.modx.com/thread/60944/php--upd#dis-post-353742
<![CDATA[Re: &#1042;&#1079;&#1099;&#1074;&#1072;&#1102; &#1082; &#1076;&#1091;&#1093;&#1072;&#1084; php-&#1084;&#1072;&#1089;&#1090;&#1077;&#1088;&#1086;&#1074;:) UPD &#1074;&#1085;&#1091;&#1090;&#1088;&#1080;]]> https://forums.modx.com/thread/60944/php--upd#dis-post-353741
в общем, сортировка пашет, написал скрипт под это дело... есть, конечно, и с ним вопросы оптимизацинного характера, позырить реализацию можно здесь http://jurist-info.ru/gotovki/got_zao/ к примеру.

могу код вывесить, если чё. описанный способ фильтрации двумерного массива, как мне кажется, наиболее отпимальный. в качестве функции sortir можно, понятное дело, что угодно лепить, задача-то основная решена -- сортировка по столбцам.

для заинтересовавшихся: strnatcasecmp -- вот эта хрень сортирует в естественно-человеческом порядке убывания, если нужна другая сортировка, можно и другую ф-цию воткнуть...]]>
openagate Aug 12, 2006, 01:51 PM https://forums.modx.com/thread/60944/php--upd#dis-post-353741
<![CDATA[Re: &#1042;&#1079;&#1099;&#1074;&#1072;&#1102; &#1082; &#1076;&#1091;&#1093;&#1072;&#1084; php-&#1084;&#1072;&#1089;&#1090;&#1077;&#1088;&#1086;&#1074;:) UPD &#1074;&#1085;&#1091;&#1090;&#1088;&#1080;]]> https://forums.modx.com/thread/60944/php--upd#dis-post-353740
ты лучше стукнись в аську, я тебе помогу]]>
aleksey.stepanov Aug 09, 2006, 08:43 AM https://forums.modx.com/thread/60944/php--upd#dis-post-353740
<![CDATA[Re: &#1042;&#1079;&#1099;&#1074;&#1072;&#1102; &#1082; &#1076;&#1091;&#1093;&#1072;&#1084; php-&#1084;&#1072;&#1089;&#1090;&#1077;&#1088;&#1086;&#1074;:)]]> https://forums.modx.com/thread/60944/php--upd#dis-post-353739 Алексей, ты издеваешься надо мной? grin я не рублю в php, чтоб расшифровать там написанное, мне придётся переводить всё это с php на русский smiley я уже "догадался" как отсортировать, и это мне стоило не один год жизни smiley мне просто хочется внутрь функции передать аргумент smiley

P.S. из общения с другом. я: надо бы выучить аглицкий, чтоб господа на иностранном форуме меня понимали правильно:) друг: лучше выучи другой язык! я: какой?! он: php grin grin grin grin grin]]>
openagate Aug 08, 2006, 02:35 PM https://forums.modx.com/thread/60944/php--upd#dis-post-353739
<![CDATA[Re: &#1042;&#1079;&#1099;&#1074;&#1072;&#1102; &#1082; &#1076;&#1091;&#1093;&#1072;&#1084; php-&#1084;&#1072;&#1089;&#1090;&#1077;&#1088;&#1086;&#1074;:)]]> https://forums.modx.com/thread/60944/php--upd#dis-post-353738 http://ru.php.net/manual/ru/function.usort.php

посмотрите первый комментарий. там как раз ваш случай.]]>
aleksey.stepanov Aug 08, 2006, 12:38 PM https://forums.modx.com/thread/60944/php--upd#dis-post-353738
<![CDATA[&#1042;&#1079;&#1099;&#1074;&#1072;&#1102; &#1082; &#1076;&#1091;&#1093;&#1072;&#1084; php-&#1084;&#1072;&#1089;&#1090;&#1077;&#1088;&#1086;&#1074;:) UPD &#1074;&#1085;&#1091;&#1090;&#1088;&#1080;]]> https://forums.modx.com/thread/60944/php--upd#dis-post-353737

Вопрос, детский smiley

Есть некий двумерный массив $array:

Array
(
    [1] => Array
        (
            [0] => 1
            [1] => a
            [2] => э
            [3] => 44
        )

    [2] => Array
        (
            [0] => 2
            [1] => d
            [2] => ю
            [3] => 33
        )

    [3] => Array
        (
            [0] => 3
            [1] => b
            [2] => я
            [3] => 22
        )

    [4] => Array
        (
            [0] => 4
            [1] => c
            [2] => а
            [3] => 11
        )

)

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

usort($array, "sortir");

//, где 

function sortir($a, $b) {
       return strnatcasecmp($a[1], $b[1]); // если надо, к примеру, по второму столбцу сортирнуть
}



продолжаю smiley

как мне передавать внутрь функции sortir номер столбца для сортировки? не варю в php wink ну, типа, какой-нить $id

UPD

вот решение моей проблемы:

global $row_sortir;

....

usort($array, "sortir");

//, где 

function sortir($a, $b) {
       global $row_sortir;
       return strnatcasecmp($a[$row_sortir-1], $b[$row_sortir-1]);
}


]]>
openagate Aug 08, 2006, 11:07 AM https://forums.modx.com/thread/60944/php--upd#dis-post-353737