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 :: Версия для печати :: array_map
Форумы портала PHP.SU » » Вопросы новичков » array_map

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

1. snikers987 - 27 Августа, 2012 - 14:53:44 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $easyPrices = array_map(create_function('$str', 'return explode("-", trim($str));'), explode("\n", $sString));


Имеем на входе:


Эта строка возвращает массив такого вида:
Спойлер (Отобразить)


Можно ли как то, без прямого перебора этого массива сделать такую структуру:

Спойлер (Отобразить)


? то есть, средствами ядра PHP
2. EuGen - 27 Августа, 2012 - 15:58:48 - перейти к сообщению
snikers987
Можно и без array_map и без перебора. Например, так:
PHP:
скопировать код в буфер обмена
  1. $sData='1-foo
  2. 2-bar
  3. baz-test
  4. 19-data';
  5.  
  6. preg_match_all("/^(.*?)\-(.*?)[\r\n]*$/sm", $sData, $rgMatches);
  7. $rgResult = array_combine($rgMatches[1], $rgMatches[2]);
  8. //var_dump($rgResult)
3. snikers987 - 27 Августа, 2012 - 20:51:20 - перейти к сообщению
EuGen интересное решение, спасибо. +
Не уверен что буду его использовать, однако буду иметь ввиду.
4. EuGen - 27 Августа, 2012 - 21:25:13 - перейти к сообщению
snikers987
Если строго следовать условиям поставленной задачи (то есть обойтись без перебора), то это - одно из нескольких возможных решений. array_map к слову, в множество таких решений не входит, так как в любом случае функция обратного вызова применяется циклически ко всем элементам массива. Дело другое, что такой цикл скрыт от пользователя.
5. snikers987 - 28 Августа, 2012 - 23:56:03 - перейти к сообщению
EuGen условие "без перебора" не критично, просто стало интересно увидить оригинальное решение задачи, сделал перебором, так как там 10 элементов всего, спросил для общего развития=)
По поводу цикла в array_map это понятно, просто зачастую так гораздо компактнее и вероятно отработает быстрее.

 

Powered by ExBB FM 1.0 RC1