2016-10-19 2 views
0

Я учусь PHP, и я застрял с одной задачей .. Я массив вида:Echo HTML таблица из PHP массива

$data[1]["First"] = "Iva"; 
$data[1]["Last"] = "Ivić"; 
$data[1]["Date"] = "2016-09-29"; 
$data[1]["Paid"] = "Yes"; 

$data[2]["First"] = "Petar"; 
$data[2]["Last"] = "Perić"; 
$data[2]["Date"] = "2016-02-08"; 
$data[2]["Paid"] = "No"; 

$data[3]["First"] = "Tomo"; 
$data[3]["Last"] = "Tomić"; 
$data[3]["Date"] = "2015-08-22"; 
$data[3]["Paid"] = "Yes"; 

мне нужно повторить HTML таблицу из этого массива. По значению ['Paid'] таблица html должна выводить поле выбора и показывать текущее значение как выбранное. Кроме того, в первом столбце таблицы должен быть указан #ID-номер.

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

<table border="1" align="center" width="80%"> 
<tr bgcolor="yellow"> 
    <th>ID #</th> 
    <th>First</th> 
    <th>Last</th> 
    <th>Date</th> 
    <th>Paid</th> 
</tr> 
<?php 

foreach ($data as $info) 
{ 
// date transform 
$date = explode('-', $info['Date']); 
//var_dump($date); 

echo '<tr align="center" bgcolor="#f6f6f6">'; 
echo ' <td>' '</td>';// How to count #IDs starting from 1?  
echo '<td>'. $info['First'] .'</td>'; 
echo '<td>'. $info['Last'] .'</td>'; 
echo '<td>'. $date[2].'.'.$date[1].'.'.$date[0].'.</td>'; 
//echo '<td>'. $info['Paid'] .'</td>'; 

echo '<td>'; 
echo '<select name="Paid">'; 
echo '<option value="0" selected>'. $info['Paid'] .'</option>'; 
echo '<option value="1">'. $info['Paid'] .'</option>';//This is where I'm stuck 
echo '</select>'; 
echo '</td>'; 
echo '</tr>'; 
} 
?> 
</table> 
?> 

Спасибо.

+0

Нужно ли считать записи? Не могли бы вы использовать каждый ключ поддиапазона для идентификатора.? – Progrock

+0

Выбранное поле, которое вы можете заменить выбранным символом ' 'на втором параметре замените 0 на 1. Это действительно полезно для этого примера, так как его невозможно легко расширить. 'echo '<значение опции =" 0 ">». $ info ['Paid'].''; echo '<значение опции = "1" >». $ info ['Paid']. ' '; ' – Blinkydamo

ответ

2

Есть много петель вы можете Для достижения этой цели наиболее простым является цикл foreach().

<!-- conditional loops --> 
<?php foreach($data as $single): ?> 

    <!-- shorthand PHP statement to echo the result --> 
    <td> <?= $single['First']; ?> </td> 

<?php endforeach; ?> 

Примечание - начальный индекс массива на 0, а не 1. Таким образом, первое значение будет $data[0]['First']

Если вы создаете таблицы для каждого массива внутри него, вы можете использовать вложенные циклы как это:

<?php for($i = 0; $i <= count($data); $i++): 
    foreach($data[$i] as $key => $val): ?> 
     <td> 
      <!-- ternary expression --> 
      <tr> <?= ($key == "First") ? $val : ""; ?> </tr> 
     </td> 
    <?php endforeach; 
endfor; 

Если вы предпочитаете другой подход, вы можете использовать while() петли для достижения той же идеи:

<?php $i = 0; 
while($i != count($data)): ?> 
    <tr> <?= $data[$i++]['First']; ?> </tr> 
<?php endwhile; 

Примечание для будущего - Это намного проще работать с BOOL типов данных, а не «да», «нет» строк. Например:

$paid = true; 
echo ($paid) ? 'selected' : ''; 

, а не что-то вроде:

echo ($paid == 'No') ? '' : 'selected'; 
+0

Я понимаю, что существует множество петель для достижения того, что мне нужно, но я все еще участвую в процессе обучения. Я сделал счет с циклом foreach(). Казалось, что это самый простой способ. –

+0

Решила ли ваша проблема? Или я пропустил все, что хотел бы, чтобы я расширился? @MarioSmode – KDOT

+0

Да, это действительно помогло! Мне удалось получить то, что мне нужно. Тем не менее, две вещи прослушивали меня, этот, и тот, у кого есть опция выбора, где @Progrock предложил рабочее решение. Как пометить правильный ответ сейчас? Вы оба были полезны ... –

0

Первая запись в массиве - это нулевая запись. Так что если вы объявляете массив, сделать это следующим образом:

$data = [ 
    [ // 0 
     "First" => "Iva", 
     "Last" => "Ivic", 
     "Date" => "2016-09-26", 
     "Paid" => "Yes", 
    ], 
    [ // 1 
     // etc. 
    ], 
]; 

Далее, если вы хотите, чтобы индексы в цикле Еогеаспа, вы должны сделать это:

foreach($data as $index => $info){ 
    // $index will now be 0 in the first iteration, 1 in the second etc. 
    echo "<td>#" . ($index + 1) . "</td>"; 
} 
+0

Индексы массива OP начинаются с 1, поэтому зачем добавлять 1? – Progrock

+0

Массив OP действительно, но не мой. Если этот '$ data' будет некоторым массивом JSON, первый элемент массива будет иметь ключ 0. Объявление' $ data' не совсем верно, поэтому я подумал, что я бы сказал об этом. ;-) – Koen

+0

Что не так с декларацией OP в $ data? – Progrock

1

С тонкой корректировкой коды вы можете просто проверить платную стоимость и если он соответствует вашему варианту добавить выбранный атрибут.

Ключи $ data можно использовать как идентификаторы.

<?php 

$data[1]["First"] = "Iva"; 
$data[1]["Last"] = "Ivić"; 
$data[1]["Date"] = "2016-09-29"; 
$data[1]["Paid"] = "Yes"; 

$data[2]["First"] = "Petar"; 
$data[2]["Last"] = "Perić"; 
$data[2]["Date"] = "2016-02-08"; 
$data[2]["Paid"] = "No"; 

$data[3]["First"] = "Tomo"; 
$data[3]["Last"] = "Tomić"; 
$data[3]["Date"] = "2015-08-22"; 
$data[3]["Paid"] = "Yes"; 

?> 
<table> 
    <thead> 
    <tr> 
     <th>ID #</th> 
     <th>First</th> 
     <th>Last</th> 
     <th>Date</th> 
     <th>Paid</th> 
    </tr> 
</thead> 
<tbody> 
<?php 
foreach ($data as $key => $info) 
{ 
    $date = explode('-', $info['Date']); 
    echo '<tr>'; 
     echo '<td>' . $key . '</td>'; 
     echo '<td>'. $info['First'] .'</td>'; 
     echo '<td>'. $info['Last'] .'</td>'; 
     echo '<td>'. $date[2].'.'.$date[1].'.'.$date[0].'.</td>'; 
     echo '<td>'; 
      echo '<select name="Paid">'; 
      $selected = $info['Paid'] == 'Yes' ? 'selected' : ''; 
      echo "<option value=0 $selected >Yes</option>"; 
      $selected = $info['Paid'] == 'No' ? 'selected' : ''; 
      echo "<option value=1 $selected >No</option>"; 
      echo '</select>'; 
     echo '</td>'; 
    echo '</tr>'; 
} 
?> 
</table> 

Я бы, вероятно, использовать Да и Нет, как значения для параметров или 1 и 0 соответственно, или просто использовать флажок. Но каждый к своим.

+0

Удивительно, спасибо! Мне дали этот массив для работы в классах, которые я посещаю. Я понимаю, что есть способы создания массива. :-) –

+0

Нет ничего плохого в том, как объявлен массив данных. – Progrock

+0

Старый отредактировал вопрос, чтобы ответить на трюк ... Ворчать ворчит. – Progrock

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