Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Массив: из двумерного в одномерный


Автор: Sunvas 18.8.2007, 01:02
Есть двумерный массив. Как из двумерного массива сделать одномерный и удалить все повторяющиеся элементы?

Автор: sTa1kEr 18.8.2007, 01:15
Код

$items = array("a" => "b", "c" => "d", array("a", "d", "f", "g"));
$arr = array();
array_walk_recursive($items, create_function('$i,$k','global $arr;if(!in_array($i,$arr))$arr[]=$i;'));
var_dump($arr);

Автор: Sunvas 18.8.2007, 11:45
Call to undefined function: array_walk_recursive()

Автор: Mal Hack 18.8.2007, 12:00
А я бы сделал в цикле:
if(is_array($arr[$i]))
array_merge($arr,$arr[$i]);
unset $arr[$i]

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

Автор: sTa1kEr 18.8.2007, 12:45
Цитата(Sunvas @  18.8.2007,  11:45 Найти цитируемый пост)
Call to undefined function: array_walk_recursive() 

Да, это в 5ом PHP. Для четвертого можно искусственную рекурсию сделать.
Код

$items = array("a" => "b", "c" => "d", array("a", "d", "f", "g"));
$result = array();
function UniqMerge($item)
{
   global $result;
   if (is_array($item))
   {
      array_walk($item, "UniqMerge");
   }
   else if(!in_array($item, $result, true))
   {
      $result[] = $item;
   }
}
UniqMerge($items);
var_dump($result);

Понимаю, что global - это плохо, но в 4ом PHP проблематично без него будет реализовать.

Автор: WolfON 18.8.2007, 13:08
sTa1kEr, да, глобал это ужасно, особенно когда можно обойтись static

Автор: sTa1kEr 18.8.2007, 13:25
Цитата(WolfON @  18.8.2007,  13:08 Найти цитируемый пост)
sTa1kEr, да, глобал это ужасно, особенно когда можно обойтись static 

В 4ом PHP?

Автор: WolfON 18.8.2007, 13:28
А разве нет? smile

Цитата

The Zend Engine 1, driving PHP 4, implements the static and global modifier for variables in terms of  references.

http://ru2.php.net/static

Автор: sTa1kEr 18.8.2007, 14:12
WolfON, да, действительно. Хоть это и противоречит всякой логике статических переменных.

Автор: Oliver.voron 15.12.2009, 16:23
имеется многомерный массив 
Array ( [0] => Array ( [optionID] => 32 
                                  [value]      => Array ( [0] => 487 
                                                                    [1] => 669 ) ) 
       [1] => Array ( [optionID] => 7   
                                  [value] => Array ( [0] => 1     
                                                               [1] => 2          ) )
     )

как из него перебрать 4 возможные комбинации массивов вида

Array ( [0] => Array ( [optionID] => 32 
                                  [value]      => Array ( [0] => 487 ) ) 
       [1] => Array ( [optionID] => 7   
                                  [value] => Array ( [0] => 1          ) )
     )

Array ( [0] => Array ( [optionID] => 32 
                                  [value]     => Array ( [0] => 487 ) ) 
       [1] => Array ( [optionID] => 7   
                                  [value]     => Array ( [1] => 2          ) )
     )
итд?

забыл. интересует универсальное решение для случаев когда в массиве может быть более двух элементов. 

Автор: bars80080 15.12.2009, 18:08
Oliver.voron, вам не кажется, что это не ваша тема, чтоб в ней задавать вопрос?

создайте новую

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)