Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Замена замены: преобразовать строку в таблицу
 
 автор: Nextia   (22.03.2011 в 07:07)   письмо автору
 
 

из базы данных приходит строка такого вида

$text="
1|город спит пахнут улицы летним дождем|0|44|32|-  2|Озаренный светом звезды по имени солнце|0|44|32|- 3|ровно 42 минуты под землей туда-сюда|0|н|32|-";
//задача получить таблицу.
//Делаю вот что:
  print ("<table border='1' width='240'>
  <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr><tr>");
$cart=str_replace("|","</td><td>", $text);
$sp_scars=array ( "\t", "\n", "\r","\0", "\x0B");
$dest=str_replace($sp_scars,"</td></tr><tr><td>",$cart);
print $dest;
 print ("</tr></table>");

Проблема не получается конец строки и начало т.е не хватает <td> в начале каждой строки и </td></tr> в конце строк

  Ответить  
 
 автор: cheops   (22.03.2011 в 10:08)   письмо автору
 
   для: Nextia   (22.03.2011 в 07:07)
 

А чем строки разделены в $text? Табуляцией или двумя пробелами?

  Ответить  
 
 автор: Nextia   (23.03.2011 в 01:49)   письмо автору
 
   для: cheops   (22.03.2011 в 10:08)
 

там \n и пробел за ним потом начало следующей строки
попробовала изменить так

 print ("<table border='1' width='240'>
  <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr><tr><td>");
$cart=str_replace('|','</td><td>', $text);
 $sp_scars=array ( "\t", "\n", "\r","\0", "\x0B");
$dest=str_replace($sp_scars,'</tr><tr><td>',$cart);
print $dest;
 print ("</td></tr></table>");

строки встали на места, но появилась лишняя пустая строка в конце таблицы

  Ответить  
 
 автор: cheops   (23.03.2011 в 12:48)   письмо автору
 
   для: Nextia   (23.03.2011 в 01:49)
 

>строки встали на места, но появилась лишняя пустая строка в конце таблицы
Попробуйте убрать признаки конеца строки "\0" "\x0B"

  Ответить  
 
 автор: Nextia   (24.03.2011 в 03:33)   письмо автору
 
   для: cheops   (23.03.2011 в 12:48)
 

в общем решение получилось вот такое:

$sp_scars=array ("\t", "\n", "\r","\0", "\x0B");

$text2=str_replace($sp_scars,"|",$text1);
 $text=explode ("|",$text2,30);
  $karta=array_chunk($text, 6);
print("<table border='1' cellspacing='1' celpadding='1' width='240' align='center'>\n");
  foreach($karta as $stroka){
  print ("<tr>\n");
  foreach ($stroka as $item)  {
  print "<td>".$item. "</td>\n"; }
  print "</tr>\n";  }
  print "</table>\n";


выяснилось, что массив всегда из 30 элементов (об этом сказали в самый последний момент), поэтому задача упростилась :-)

А теперь возник вопрос как на каждый шестой элемент массива перед печатью таблицы "навесить" <select>? Где значение элемента будет выбранной опцией(selected) значения этих элементов всегда одинаковые 0 или 1

  Ответить  
 
 автор: cheops   (24.03.2011 в 07:43)   письмо автору
 
   для: Nextia   (24.03.2011 в 03:33)
 

Хм... может просто в цикле прогнать массив, запомнив индекс каждого шестого элемента, а в сам элемент вставить якорь (если, конечно, select создается для якорения)?

  Ответить  
 
 автор: Nextia   (24.03.2011 в 09:10)   письмо автору
 
   для: cheops   (24.03.2011 в 07:43)
 

Возможно, не всё досконально объяснила :-)
$text двумерный массив.
вот для этих элементов
$text[1][5]
$text[1][11]
$text[1][17]
$text[1][23]
$text[1][29]

надо навесить select . проверить их значение (т.е 0 или 1).
т.е если равно 0 то апримерно так:
<select name="$text[1]" size="1">
<option value=".$text[1][5]." "selected="selected"">$text[1][5]</option>
<option value="1">1</option>
</select>
Надеюсь понятно объяснила :-)

  Ответить  
 
 автор: cheops   (24.03.2011 в 10:13)   письмо автору
 
   для: Nextia   (24.03.2011 в 09:10)
 

Правильно ли я понимаю, что значения следующих элементов либо 0, либо 1?
$text[1][5]
$text[1][11]
$text[1][17]
$text[1][23]
$text[1][29]
И в конечном итоге у нас должно получиться 5 выпадающих списка?

  Ответить  
 
 автор: Nextia   (25.03.2011 в 01:46)   письмо автору
 
   для: cheops   (24.03.2011 в 10:13)
 

>Правильно ли я понимаю, что значения следующих элементов либо 0, либо 1?
Моё решение на данный момент очень "грязное":

// продолжаюся мучения двумерного массива
 $text=explode ("|",$text2,30);
$karta=array_chunk($text, 6);
if (($karta[1][5])==0)
{$new_value1="<select name='".($karta[1])."' size='1'><option value='".($karta[1][5])."' selected='selected'>Не включено</option><option value='1'>Включено</option></select>";
$karta[1][5]=$new_value1; }
else
// print("{$karta[1][5] }");
{$new_value1="<select name='".($karta[1])."' size='1'><option value='".($karta[1][5])."' selected='selected'>Включено</option><option value='0'>Не включено</option></select>";
$karta[1][5]=$new_value1;}
//для второй строки
  if (($karta[2][5])==0)
{$new_value2="<select name='".($karta[2])."' size='1'><option value='".($karta[2][5])."' selected='selected'>Не включено</option><option value='1'>Включено</option></select>";
$karta[2][5]=$new_value2; }
else
// print("{$karta[2][5] }");
{$new_value2="<select name='".($karta[2])."' size='1'><option value='".($karta[2][5])."' selected='selected'>Включено</option><option value='0'>Не включено</option></select>";
$karta[2][5]=$new_value2;}
//для третьей строки
if (($karta[3][5])==0)
{$new_value="<select name='".($karta[3])."' size='1'><option value='".($karta[3][5])."' selected='selected'>Не включено</option><option value='1'>Включено</option></select>";
$karta[3][5]=$new_value; }
else
// print("{$karta[3][5] }");
{$new_value="<select name='".($karta[3])."' size='1'><option value='".($karta[3][5])."' selected='selected'>Включено</option><option value='0'>Не включено</option></select>";
$karta[3][5]=$new_value;}
//4 строка
 if (($karta[4][5])==0)
{$new_value4="<select name='".($karta[4])."' size='1'><option value='".($karta[4][5])."' selected='selected'>Не включено</option><option value='1'>Включено</option></select>";
$karta[4][5]=$new_value4; }
else
// print("{$karta[4][5] }");
{$new_value4="<select name='".($karta[4])."' size='1'><option value='".($karta[4][5])."' selected='selected'>Включено</option><option value='0'>Не включено</option></select>";
$karta[4][5]=$new_value4;}
//5 строка
if (($karta[0][5])==0)
{$new_value5="<select name='".($karta[0])."' size='1'><option value='".($karta[0][5])."' selected='selected'>Не включено</option><option value='1'>Включено</option></select>";
$karta[0][5]=$new_value5; }
else
// print("{$karta[4][5] }");
{$new_value5="<select name='".($karta[0])."' size='1'><option value='".($karta[0][5])."' selected='selected'>Включено</option><option value='0'>Не включено</option></select>";
$karta[0][5]=$new_value5;}
print("<table border='0' cellspacing='1' celpadding='1' width='240' align='center'>\n");
  foreach($karta as $stroka){
  print ("<tr>\n");
  foreach ($stroka as $item)  {
  print "<td class='su'>".$item. "</td>\n"; }
  print "</tr>\n";  }
  print "</table>\n";

  Ответить  
 
 автор: cheops   (25.03.2011 в 08:52)   письмо автору
 
   для: Nextia   (25.03.2011 в 01:46)
 

Давайте следующий участок
<?php
  
...
  if ((
$karta[1][5])==0)
  ...
  
$karta[0][5]=$new_value5;}
  ...
?>

Переработаем с участием цикла и функции
<?php
  
for($i 0$i 6$i++)
  {
    
$new_value[$i] = "<select name='".($karta[$i])."' size='1'>";
    
$new_value[$i] .= "<option value='0' ".selected($karta[$i][5]==0).">Не включено</option>";
    
$new_value[$i] .= "<option value='1' ".selected($karta[$i][5]==1).">Включено</option>";
    
$new_value[$i] .= "</select>";
    
$karta[$i][5]=$new_value1;
  } 
  function 
selected($flag)
  {
    if(
$flag) return "selected='selected'";
    else return 
"";
  }
?>

  Ответить  
 
 автор: Nextia   (25.03.2011 в 10:23)   письмо автору
 
   для: cheops   (25.03.2011 в 08:52)
 

Спасибо огромное.
Сформировалось всё как желалось

[поправлено модератором: новая ветка обсуждения выделена в тему Свернуть код для работы с массивом в цикл]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования