Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обвернуть массив 
V
    Опции темы
neoks
Дата 26.5.2012, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Интересует такой вот вопрос, к примеру я делаю так
Код

foreach($n['attr'] as $j=>$v) $se[] = $j.'="'.$v.'"';
        return '<div '.implode(' ',$se).'>'.$i.'</div>';

Приходится перебрать массив чтоб обвернуть каждое значение в ="..." затем впихать в массив и использовать implode()
Так вот интересует есть ли короткий вариант без перебора массива чтоб обвернуть каждое значение в массиве ) к примеру

Код

['test','test2']


В результат

Код

['="test"','="test2"']


PM MAIL   Вверх
Evghenusi
Дата 26.5.2012, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 6
Всего: 15



Цитата(neoks @  26.5.2012,  21:41 Найти цитируемый пост)
есть ли короткий вариант

Код

//1) без дополнительного массива
foreach($arr as $k=>$v) $arr[$k] = '="'. $arr[$k] .'"';
return '<div '.implode(' ',$se).'>'.$i.'</div>';

//2) без дополнительного массива и ф-ии implode
$str = '';
foreach($arr as $k=>$v) $str .= $k .'="'. $arr[$k] .'"';
return '<div '.$str.'>'.$i.'</div>';

Цитата(neoks @  26.5.2012,  21:41 Найти цитируемый пост)
без перебора массива
пока что хз(

Добавлено через 2 минуты и 18 секунд
хотя конечно не такие уж и короткие варианты, если погоня за байтом
PM WWW   Вверх
neoks
Дата 26.5.2012, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Ясно, значит не судьба  smile 
PM MAIL   Вверх
Evghenusi
Дата 27.5.2012, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 6
Всего: 15



ещё такой вариант
Код
function test(&$v, $k){ $v = $k.'="'.$v.'"'; }
array_walk($arr, 'test');
return '<div '.implode(' ',$arr).'>'.$i.'</div>';
, но по мне так страшнее предыдущих
PM WWW   Вверх
Fortop
Дата 27.5.2012, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Да бросьте вы

Код

'<div ="' . implode('" ="', $n['attr']) . '">'


Пардон, еще ключи надо
Тогда лучше обойти массив 2м вариантом

Но если вас не беспокоят некоторые проблемы, тогда можно вот так

Писать полностью все регуляркой мне было лень smile
Код

echo preg_replace(array('~\[([^\]]+)\]\s=>\s(.*)~', '~\r~', '~\n~', '~\s{2,}~'), array('\\1="\\2" ', '','',' '), trim(substr(print_r($a, true), 6), ' '. PHP_EOL . '()'));


Это сообщение отредактировал(а) Fortop - 27.5.2012, 15:02


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Evghenusi
Дата 27.5.2012, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 6
Всего: 15



Цитата(Fortop @  27.5.2012,  14:19 Найти цитируемый пост)
Да бросьте вы
и ведь действительно,  smile
хотя при таком выводе ключей не будет

в предложенном варианте от ТС результат работы "скрипта"
Код
<div 0="test" 1="test2"></div>

, но так же есть и пример требуемого результата -

Цитата(neoks @  26.5.2012,  21:41 Найти цитируемый пост)
['="test"','="test2"']

хз короче!)

Это сообщение отредактировал(а) Evghenusi - 27.5.2012, 14:56
PM WWW   Вверх
neoks
Дата 27.5.2012, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 5.7.2010

Репутация: нет
Всего: 1



Цитата(Fortop @  27.5.2012,  14:19 Найти цитируемый пост)
Да бросьте вы

Действительно, что поделаешь ), значит так и будет ))
Просто было интересно есть ли короткий вариант, ну думаю и перебором тоже сойдет  smile 
PM MAIL   Вверх
baldina
Дата 28.5.2012, 12:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



может он не самый короткий, но вполне понятный и без циклов
Код

$a = array ('foo'=>'Foo', 'bar'=>'Bar');

function kv ($a, $b) {
  return $a . '=' . $b;
}

echo implode (',', array_map ('kv', array_keys($a), array_values($a)));


к сожалению array_map и array_reduce передают в параметрах только значения.
можно написать свою версию array_reduce, она может и в других случаях пригодиться

Код

function array_reduce_with_keys ($array, $callback, $initial=null) {
    $acc = $initial;
    foreach($array as $k=>$v)
        $acc = $callback($acc, $k, $v);
    return $acc;
}


$a = array ('foo'=>'Foo', 'bar'=>'Bar');

function kv ($str, $a, $b) {
  if ($str != '')
    $str .= ',';
  return $str . $a . '=' . $b;
}

echo array_reduce_with_keys ($a, 'kv', '');

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.