Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Хитрая строка
Форумы портала PHP.SU » PHP » Программирование на PHP » Хитрая строка

Страниц (1): [1]
 

1. Viper - 27 Января, 2010 - 13:56:31 - перейти к сообщению
Есть строка вида
CODE (htmlphp):
скопировать код в буфер обмена
  1. 1{Andrea}|7{Amy}|9{John}

первый параметр id записи, второй просто текст.

нужно отделить все id от котлет и собрать в строку вида 1,7,9 (будет участвовать в IN)
и то что в фигурных скобках вывести отдельно в массив.
несколько туманно...

... в таблице запись 1{Andrea}|7{Amy}|9{John} выбрали.
далее нужно выбрать из другой таблицы записи с id 1,7,9 (к примеру получаем:
1, Farelly
2, Adams
3, Doe)
далее в цикле вывести эти записи, но так чтобы было соответствие
1, Andrea, Farelly
7, Amy, Adams
9, John, Doe

Как такое соорудить?
2. JustUserR - 27 Января, 2010 - 14:06:51 - перейти к сообщению
Viper Примерно с помощью такого кода
PHP:
скопировать код в буфер обмена
  1. $v_str="1{Andrea}|7{Amy}|9{John}";
  2. $all_sect=explode('|',$v_str);
  3. $res_arr=array();
  4. for($i=0;$i<count($all_sect);i++)
  5. {list($id,$name)=explode('{',$all_sect[$i]);
  6. $name=str_replace("}","",$name);
  7. if(!res_arr["$id"]) {res_arr["$id"]=array();} else {}
  8. res_arr["$id"][]=$name;}
  9. forearch($res_arr as $cid=>$vals)
  10. {echo $cid." : ".implode(',',$vals);
  11. }
Если таких строк много то они легко объединяются по ID путем копирования кода с 3 по 7 строку для каждой из таких строк (Или просто их загнать в массив)
3. Viper - 30 Января, 2010 - 09:34:58 - перейти к сообщению
сейчас почему-то стало вылазить
CODE (htmlphp):
скопировать код в буфер обмена
  1. Notice: Undefined index: 1 in D:\WWW\htdocs\local...
  2. Notice: Undefined index: 7 in D:\WWW\htdocs\local...
  3. Notice: Undefined index: 9 in D:\WWW\htdocs\local...


ругня на строку if (!$res_arr[$id]) {

PHP:
скопировать код в буфер обмена
  1. $all_sect = explode('|', $p_name);
  2. $res_arr = array();
  3.  
  4. for ($i=0; $i<count($all_sect); $i++) {
  5.         list($id, $name) = explode('{', $all_sect[$i]);
  6.         $name = str_replace('}', '', $name);
  7.         if (!$res_arr[$id]) {
  8.                 $res_arr[$id] = array();
  9.         } else {}
  10.         $res_arr[$id][] = $name;
  11. }
  12. $ids =  implode(',', array_keys($res_arr));
  13. $database->setQuery("SELECT `id` FROM `#__personal` WHERE `id` IN ($ids) AND `published` = '1' AND `access` <= '$my->gid'");


что не так?
4. SAD - 30 Января, 2010 - 09:39:27 - перейти к сообщению
если работает, то те notice - не ошибки, а замечания.
5. Мелкий - 30 Января, 2010 - 09:53:07 - перейти к сообщению
Viper пишет:
ругня на строку if (!$res_arr[$id]) {

Хочет, чтобы переменную на isset проверяли.
6. Viper - 30 Января, 2010 - 10:11:16 - перейти к сообщению
SAD пишет:
если работает, то те notice - не ошибки, а замечания.

ага. но я стараюсь чтобы их не было. Улыбка

Мелкий пишет:
Хочет, чтобы переменную на isset проверяли.


спасибо за наводку. сделал проверку - все гуд теперь!
7. PeaceDuke - 30 Января, 2010 - 13:52:13 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3. <?
  4. $text = "1{Andrea}|7{Amy}|9{John}";
  5. $text = explode('|', $text);
  6. $count = count($text);
  7. $i = 0;
  8. while ($i <= $count) {
  9. $text[$i] = preg_replace('/^([0-9]){(.*?)}(|)/', '<b>\1</b>,', $text[$i]);
  10. $text_all = $text_all.$text[$i];
  11. $i++;}
  12. echo $text_all;
  13. ?>
  14. © Wakko and Peake Duke
  15.  
8. JustUserR - 31 Января, 2010 - 01:22:49 - перейти к сообщению
PeaceDuke Исходной задачей было вроде бы не убирание скобок и щнаков конвеера - а распределение данных по массиву - и тем более с функцией добавления записей с одинаковым ID в один и тот же подмассив
Viper Что касается notice-ов то вероятно имеются неиспользованные или неопределенные переменные - если вы немного исправляли мой код то вероятно изменили название массива и он создался автоматически и выдался notice Улыбка

 

Powered by ExBB FM 1.0 RC1