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

Форум MySQL

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

 

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

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

тема: Вопрос по mysql и массивам
 
 автор: vbps   (26.10.2006 в 20:07)   письмо автору
 
 

в базе есть два столбца

id | name
2 name1
4 name2
11 name3

как из базы это дело получить массив вида:


$Subs = array( "2" => "name1", "4" => "name2",  "11" => "name3");


???

   
 
 автор: Trianon   (26.10.2006 в 20:13)   письмо автору
 
   для: vbps   (26.10.2006 в 20:07)
 

<?
  $res 
mysql_query("select id,name from tab");
  while(
$row mysql_fetch_assoc($res)) 
    
$Subs[$row['id']] = $row['name'];
?>

   
 
 автор: vbps   (26.10.2006 в 20:49)   письмо автору
 
   для: Trianon   (26.10.2006 в 20:13)
 

А как получить саму переменную $Subs?

мне это нужно что бы подставить для замены строки $st, где идут числа 1,2,4,10,25 и т.д., на содержимое в поле name.


$ln = strtr($st,$Subs);


т.е. $Subs содержит масив

   
 
 автор: Trianon   (26.10.2006 в 21:01)   письмо автору
 
   для: vbps   (26.10.2006 в 20:49)
 

Как получить $Subs - я написал предыдущим постом. Если Вам не нравится, что она изначально не инициализирована - добавьте спереди $Subs = array();
Что делает функция strtr - Вы, похоже, не понимаете.
Использовать её для ничем не обрамленных числовых данных - самоубийство.

   
 
 автор: vbps   (26.10.2006 в 21:11)   письмо автору
 
   для: Trianon   (26.10.2006 в 21:01)
 

Спасибо, разобрался, все работает.

Только не понял почему использовать strtr самоубийство?

Тут описан метод работы http://www.softtime.ru/dic/id_dic=76&id_group=1
и все прекрасно работает.

   
 
 автор: Trianon   (26.10.2006 в 21:16)   письмо автору
 
   для: vbps   (26.10.2006 в 21:11)
 

а там голые числовые данные ? что-то не заметил.
Вот когда Вы замените среди 1 на один среди 12,32,51 и получите один2,32,5один - увидите.

   
 
 автор: vbps   (27.10.2006 в 11:42)   письмо автору
 
   для: Trianon   (26.10.2006 в 21:16)
 

В общем, посмотрел и согласен.

В случае как вы и писали, будет абра


$Subs = array( 
"1" => "один", 
"2" => "два",  
"51" => "три");
$st="12,32,51";
$ln = strtr($st,$Subs);
echo $ln; echo "<br>";


Однако если есть на 100% соответствующие данные, то все работает правильно


$Subz = array( 
"1" => "один", 
"2" => "два",  
"51" => "три",
"12" => "SSSSS", 
"32" => "NNNNN",  
);
$ss="12,32,51";
$ld = strtr($ss,$Subz);
echo $ld; echo "<br>";


А есть какая то функция лучше?

   
 
 автор: Trianon   (27.10.2006 в 11:47)   письмо автору
 
   для: vbps   (27.10.2006 в 11:42)
 

откуда Вы достаете строку?

В крайнем случае, разбить её по запятой (explode) и работать с массивом.

   
 
 автор: vbps   (27.10.2006 в 11:59)   письмо автору
 
   для: Trianon   (27.10.2006 в 11:47)
 

Я так пробовал, только мне сначала нужно было сделать замену, затем сортировать, а потом уже я использовал explode и вывод через шаблон.

Я так понял вы имеете ввиду делать замену не строка <- массив, а массив <- массив?

Строку достаю из записи с id где полесодержит строку с другими id

   
 
 автор: Trianon   (27.10.2006 в 12:10)   письмо автору
 
   для: vbps   (27.10.2006 в 11:59)
 

>Я так понял вы имеете ввиду делать замену не строка <- массив, а массив <- массив?
Не зная структуры и источника данных, я вообще в виду не имел.
А про источник Вы не ответили.

   
 
 автор: vbps   (27.10.2006 в 12:28)   письмо автору
 
   для: Trianon   (27.10.2006 в 12:10)
 

Не совсем понял про источник.
Строка $st хранится в базы именно в виде строки 1,2,3,10,25,6,17
Для каждой записи (id) есть своя строка, и может содержать любой набор.

В общем

Есть подкатегория id,name // таблица 1
Есть список продуктов id,title,theme // таблица 2

поле theme и есть строка $st, где каждое число соответствует подкатегории.

Я ответил на вопрос?

   
 
 автор: Trianon   (27.10.2006 в 12:34)   письмо автору
 
   для: vbps   (27.10.2006 в 12:28)
 

Момент первый. В базе данные так не хранят.
Момент второй. Если на методику хранения данных Вы воздействовать не можете, то более надежным способом будет, получив строку, тут же преобразовать её в массив через explode, а после уж заниматься заменами.

$list = array();
foreach(explode(',', $str) as $val)
   $list[] = isset($subz[$val]) ? $subz[$val] : $val;
$str = implode(',', $list);

   
 
 автор: vbps   (27.10.2006 в 13:07)   письмо автору
 
   для: Trianon   (27.10.2006 в 12:34)
 

Ok, спасибо, сейчас попробую.
Хотя, то как я написал с вашей помощью работает, но на будующее пригодится, всякое быват.

   
Rambler's Top100
вверх

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