2015-11-02 4 views
-1
 foreach($myFile as $value){ 
      $arr = explode(",",$value); 

      echo "<tr>"; 
       foreach($arr as $out) { 

         if ((strcmp($arr[$city], $out)) == 0){ 
         echo "<td><i>" . $out . "</i></td>"; 
        } 

        else if((strcmp($arr[$pick], $out)) == 0){ 
         $var = ucfirst(strtolower($out)); 
         echo "<td>". $var. "</td>"; 
         unset($var); 
        } 

        else{ 
         echo "<td>" . $out . "</td>"; 
        } 
        $count++; 
        unset($out); 
       } 
      echo "</tr>"; 
      unset($arr); 
     } 
     unset($myFile); 

Код, указанный выше, используется для чтения CSV-файла и его печати в виде таблицы HTML. Он уже работает, но у меня возникают проблемы с его сортировкой.PHP: сортировка массива

Содержание моего .csv-файла - это переменная $myFile. That's the output

Теперь я должен отсортировать массив по столбцу last, как я могу это сделать?

И еще вопрос: почему я получаю ошибку неопределенного смещения? Линии ошибок: if((strcmp(...)). Массив, имеющий 10 записей и значения переменных:
$pick = 9
$city = 5

+0

Я смущен о том, что вы хотите отсортировать здесь ... – Sumurai8

+0

Весь объем должен быть отсортирован по колонку * последний * –

+0

Я не думаю, что вам нужно 'unset()' vars. Когда они (re) определены, они заменяют любое предыдущее значение. – MaggsWeb

ответ

0

Используйте php multisort function на массиве $ обр сразу после определения его.

foreach ($arr as $key => $row) 
{ 
    $last[$key] = $row['last']; 
} 
array_multisort($last, SORT_DESC, $arr) 
+0

Это не работает, просто попробовал. –

0

Вы можете выполнить это с помощью usort. Он принимает функцию с двумя аргументами, которые следует сравнивать друг с другом. Функция должна возвращать int. Что касается вашей другой ошибки, я предполагаю, что у вас есть этот код в функции, которая не имеет доступа к глобальной переменной.

Обратите внимание, что попытка выяснить, будет ли столбец, который вы собираетесь отображать, является специальным столбцом, сравнивая значения этих столбцов ... странно. Если вы хотите сделать что-то особенное в определенных столбцах, просто итетерируйте с помощью for-loop вместо foreach-loop и просто сравните индексы столбцов.

function displayTable($myFile) { 
    global $columnCity, $columnPick; 

    usort($myFile, function($a, $b) { 
    global $columnLast; 
    return strcmp($a[$columnLast], $b[$columnLast]); 
    }); 

    echo "<table>"; 

    foreach($myFile as $value) { 
    $arr = explode(",", $value); 
    $count = 0; //Useless? 

    echo "<tr>"; 

    for($i = 0; $i < count($arr); $i++) { 
     $out = $arr[$i]; 
     if($i == $columnCity) { 
     echo "<td><i>{$out}</i></td>"; 
     } else if($i == $columnPick) { 
     $var = ucfirst(strtolower($out)); 
     echo "<td>{$var}</td>"; 
     unset($var); 
     } else { 
     echo "<td>{$out}</td>"; 
     } 
     $count++; 
     unset($out); 
    } 

    echo "</tr>"; 
    unset($arr); 
    } 

    unset($myFile); 

    echo "</table>"; 
} 

displayTable($input); 
?> 

скрипку доступны здесь: http://phpfiddle.org/lite/code/yqii-fkn2

Смежные вопросы