#php #arrays #filter
#php #массивы #Фильтр
Вопрос:
Существует файл .txt, который сохраняет каждую запись из входных данных. Я читаю файл и разбиваю его по определенному символу. В 3-м столбце есть сумма всех значений. Я хочу реализовать опцию фильтра категорий.
Мой код до сих пор :
<?php
if(file_exists('store.txt')){
$result=file('store.txt');
foreach($result as $value){
$columns = explode('!', $value);
$price = array($columns[2]);
$sum = $price[0];
if(isset($_POST['filter'])){ //There's the part with the filter
$filter = $_POST['category'];
}
echo
'<tr><td>'.$columns[0].'</td>
<td>'.$columns[1].'</td>
<td>'.$columns[2].'</td>
<td>'.$columns[3].'</td></tr>';
}
}
?>
Заранее благодарю вас!
Ответ №1:
Печать значений из текстового файла на сервере в таблицу HTML с возможностью ограничения результатов, суммирования и цены, с использованием PHP.
getstore.php:
if(file_exists('store.txt')) {
$result=file('store.txt');
$filter = 'no';
if ( isset($_POST['filter']) ) {
$filter = $_POST['filter'];
echo 'Filter = "' . $filter . '"';
}
else { echo 'No filter selected.'; }
if ( 0 < count($result) ) {
echo '<table border="1"><tr><th>column 1</th><th>column 2</th><th>price</th><th>filter</th></tr>';
$sum = 0;
foreach($result as $value) {
$columns = explode('!', $value);
if ( 'no' == $filter || trim($columns[3]) == $filter ) {
$sum = $columns[2]; // add price to total
echo '<tr><td>'.$columns[0].'</td><td>'.$columns[1].'</td><td>'.$columns[2].'</td><td>'.$columns[3].'</td></tr>';
}
}
echo "<tr><td></td><td align="right"><strong>SUM:</strong></td><td>$sum</td><td></td></tr></table>";
}
else { 'Empty file.'; }
}
else { echo 'File not found.'; }
?>
<form action="getstore.php" method="post">
<select name="filter">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<input type="submit">
</form>
Когда я выбираю фильтр 2, выдает мне:
Filter = "2"
<table border="1">
<tr>
<th>column 1</th>
<th>column 2</th>
<th>price</th>
<th>filter</th>
</tr>
<tr>
<td>row 4, column 1, index 0</td>
<td>column 2, index 1</td>
<td>25</td>
<td>2</td>
</tr>
<tr>
<td>row 5, column 1, index 0</td>
<td>column 2, index 1</td>
<td>30</td>
<td>2</td>
</tr>
<tr>
<td>row 6, column 1, index 0</td>
<td>column 2, index 1</td>
<td>35</td>
<td>2</td>
</tr>
<tr>
<td></td>
<td align="right"><strong>SUM:</strong></td>
<td>90</td>
<td></td>
</tr>
</table>
Комментарии:
1. Я сделал это, но он находится в другом файле с формой ввода.
2. Таким образом, columns — это массив, а columns [2] — это значение из всего массива, если вы передаете его, вы получите просто строку. Поэтому я создал новый массив из этого значения существующего массива, чтобы упростить процедуру суммирования. Это моя логика. Пожалуйста, поправьте меня, если это впечатляюще неправильно.
3. Ооокей. Это не работает самостоятельно. Пожалуйста, если у вас есть какие-то предложения о том, как его создать. Свяжитесь со мной, и за это время я подумаю об этом и поделюсь результатом, если что-то получится. Итак, чтобы начинающие знали, как это сделать.
4. Нет. Просто ничего не получаю. Ничего не произошло.
5. Тогда все в порядке. Итак, я получаю результат, который представляет собой огромный массив каждой введенной записи в таблице. Таким образом, каждая запись с некоторыми данными, созданная из другого файла формы, отображается в этой таблице. Итак, я думаю, я должен сказать: «Когда я нажимаю category == 2, покажите мне массивы с 3-м ключом == 2, когда я делаю POST-запрос, нажимая эту кнопку и так далее.. Но я действительно не вижу никаких способов сделать это «.