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. leshiy_SV - 19 Января, 2010 - 15:34:28 - перейти к сообщению
Помогите можно ли как нибудь упростить код, чтобы два раза не перебирать массив?
CODE (htmlphp):
скопировать код в буфер обмена
  1. foreach ($user as $keys=>$values)  {
  2.   if((empty($user["$keys"]))||(($user["keys"])=='""'))  unset($user["$keys"]);}//убрать пустые значения
  3. foreach ($user as $keys=>$values)  {
  4.   $infoUser.=$keys."=".$values.", ";}// получить строку ключ=значение,
  5. echo $infoUser;
Чтобы в итоге получить строку вида name=Иван, age=18 и т.д.
2. Ch_chov - 19 Января, 2010 - 15:43:22 - перейти к сообщению
А что это значит. В массиве могут быть значения с в виде двух кавычек?
3. leshiy_SV - 19 Января, 2010 - 15:49:19 - перейти к сообщению
Ch_chov пишет:
скопировать код в буфер обмена

1.
$user["keys"])=='""'

А что это значит. В массиве могут быть значения с в виде двух кавычек?
Ошибся.
удаляются пустые значения.
4. krivetko-man - 19 Января, 2010 - 15:54:51 - перейти к сообщению
Можно воспользоваться array_filter с функцией-обработчиком, которая будет собирать строку $infoUser, объявденную вне её, а также возвращать FALSE для пустых элементов.
5. Ch_chov - 19 Января, 2010 - 15:56:47 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. foreach ($user as $k => $v)
  2.   if(!empty($v)) $infoUser[] = $k.' = '.$v;
  3. $infoUser = implode(', ', $infoUser);
6. JustUserR - 19 Января, 2010 - 16:04:10 - перейти к сообщению
Данный вариант сразу формирует строку из непустых элементов массива и сразу чистит массив от пустых элементов
PHP:
скопировать код в буфер обмена
  1. foreach ($user as $keys=>$values)  {
  2. if((empty($user["$keys"]))||(($user["keys"])==""))   {unset($user["$keys"]);}
  3. else {$infoUser.=$keys."=".$values.", ";}
  4. echo $infoUser;

PS Опять номера строк копируются в буфер обмена
7. movEAX - 19 Января, 2010 - 16:25:36 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. // удаляем пустые элементы массива
  2. $user = preg_grep('!.!',$user);
  3. foreach($user as $k=>$v) $infoUser.=$k.'='.$v.', ';
8. RomAndry - 19 Января, 2010 - 16:32:28 - перейти к сообщению
JustUserR пишет:
PS Опять номера строк копируются в буфер обмена

НЕ должно =)
9. Stierus - 19 Января, 2010 - 17:14:57 - перейти к сообщению
Цитата:
foreach ($user as $keys=>$values) {
if((empty($user["$keys"]))


это круто Улыбка
10. leshiy_SV - 20 Января, 2010 - 08:38:15 - перейти к сообщению
А можно ли как нибудь по другому сделать привести к такому выводу?
movEAX пишет:
1. // удаляем пустые элементы массива
2. $user = preg_grep('!.!',$user);
3. foreach($user as $k=>$v) $infoUser.=$k.'='.$v.', ';
А как можно этот код доработать чтобы и значения, равные нулю, тоже удалялись?
(Добавление)
Вот так правильно будет?
CODE (htmlphp):
скопировать код в буфер обмена
  1. preg_grep('![1-9a-zA-Zа-яА-Я]!',$user);
чтобы пустые и значения, равные нулю, не брались
11. JustUserR - 20 Января, 2010 - 10:20:23 - перейти к сообщению
leshiy_SV пишет:
Вот так правильно будет?
В принципе правильно но будут идти специфическая выборка - то есть значения из спецсимволом тоже будут удаляться (Да и русский язык зависит от кодировки и может плохо работать)
Не проще ли все-таки оставить циклом Улыбка
12. movEAX - 20 Января, 2010 - 11:06:18 - перейти к сообщению
leshiy_SV пишет:
А можно ли как нибудь по другому сделать привести к такому выводу?

PHP:
скопировать код в буфер обмена
  1. $user = preg_grep('![^0]!', $user);
  2. foreach($user as $k=>$v) @$infoUser.=$k.'='.$v.', ';

 

Powered by ExBB FM 1.0 RC1