правильный способ отображения массива в php - PullRequest
0 голосов
/ 26 октября 2011

Итак, у меня есть этот тип массива

$fields = array('result'=>234, '1'=>1, '2'=>2, '3'=>4, ....'20'=>5);

и я должен отобразить его в таблице, но ключ «результат» должен быть последним столбцом. До сих пор я использовал этот подход, но проблема возникает, как только мне нужно добавить другие ключи, кроме «результатов», в конец таблицы.

foreach($fields as $key=>$value) {
  if(strcmp('key', 'result') != 0)
    echo "<td>$value</td>";
  }
echo "<td>$fields['result']</td>";

Я предполагаю, что это должен быть лучший подход. Что ты думаешь?

Ответы [ 5 ]

3 голосов
/ 26 октября 2011

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

$result = $fields['result'];
$otherResult = $fields ['other_result'];
unset($fields['result'], $fields['other_result']);

foreach($fields as $key=>$value) {
    echo "<td>$value</td>";
}

echo "<td>$result</td>";
echo "<td>$otherResult</td>";

Это полезно делать только для небольшого количества клавиш.

2 голосов
/ 26 октября 2011
// array of columns you want to add at the end of the table in sequence
// I used an array of columns and an exrta foreach loop to be able to support possible future more columns to be added
$last_cols = array('result'=>null, 'other'=>null);

foreach($fields as $key=>$value) {
    // check if current column is one of the cols to be added at the end
    if (in_array($key, array_keys($last_cols))) {
        $last_cols[$key] = $value;
        continue;
    }

    echo '<td>'.$fields['result'].'</td>';
}
// loop through last columns
foreach($last_cols as $col) {
    echo '<td>'.$col.'</td>'
}
1 голос
/ 26 октября 2011

В этом случае ваша структура данных сформирована неправильно. Почему вы не используете

$result = 123;

? Или простой объект, содержащий $ result и $ values, например:

class MyDataContainer {
   public $result = 0;
   public $values = array();
}

? Я бы порекомендовал это, так как это будет намного чище.

1 голос
/ 26 октября 2011

Есть более быстрый путь:

$result = $fields['result'];
$otherResult = $fields['otherResult'];

unset($fields['result'], $fields['otherResult']);
foreach($fields as $key=>$value) {
  echo '<td>' . $value . '</td>';
}

echo '<td>' . $result . '</td>';
echo '<td>' . $otherResult . '</td>';

Вы не проверяете ключ каждый раз.

Однако, если вы действительно хотите - сделайте это следующим образом:

if( $key == 'result' )
0 голосов
/ 26 октября 2011

Сделайте первый элемент последним элементом в массиве (поскольку вы не используете ключи в своем вопросе):

$fields = array('result'=>234, '1'=>1, '2'=>2, '3'=>4, ....'20'=>5);

$fields[] = array_shift($fields);

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...