Функция собирает все значения многомерного массива в отдельный одномерный массив.
haystack - массив, arrName - массив с собранными данными (по дефолту collectValues)
function collectValue($haystack,$arrName='collectValues'){
global ${$arrName};
if(!isset(${$arrName})) ${$arrName} = array();
if(is_array($haystack))
foreach($haystack as $value)
if(is_array($value))
collectValue($value,$arrName);
else
${$arrName}[] = $value;
else
${$arrName}[] = $haystack;
unset($haystack);
};
Для теста:
$arr = array(array('1',array('66','hgjhj',array('88','99',array('88','dfgfd',array('88','99',array('88','99',array('88','99',array('88','99',array('88','99',array('88','99')))))))))),'2','3',array('4','5'));
Вызов
collectValue($arr, 'newArr');
Получаем $newArr:
Array
(
[0] => 1
[1] => 66
[2] => hgjhj
[3] => 88
[4] => 99
[5] => 88
[6] => dfgfd
[7] => 88
[8] => 99
[9] => 88
[10] => 99
[11] => 88
[12] => 99
[13] => 88
[14] => 99
[15] => 88
[16] => 99
[17] => 88
[18] => 99
[19] => 2
[20] => 3
[21] => 4
[22] => 5
)
Содержимое $arr
Array
(
[0] => Array
(
[0] => 1
[1] => Array
(
[0] => 66
[1] => hgjhj
[2] => Array
(
[0] => 88
[1] => 99
[2] => Array
(
[0] => 88
[1] => dfgfd
[2] => Array
(
[0] => 88
[1] => 99
[2] => Array
(
[0] => 88
[1] => 99
[2] => Array
(
[0] => 88
[1] => 99
[2] => Array
(
[0] => 88
[1] => 99
[2] => Array
(
[0] => 88
[1] => 99
[2] => Array
(
[0] => 88
[1] => 99
)
)
)
)
)
)
)
)
)
)
[1] => 2
[2] => 3
[3] => Array
(
[0] => 4
[1] => 5
)
)
Спустя 16 часов, 32 минуты, 1 секунда (23.03.2011 - 10:16) linker написал(а):
Имхо лучше
function collectValue($haystack, array &$arr)или так
{
...
}
$newArr = array();
collectValue($arr, $newArr);
function collectValue($haystack)
{
...
return $arr;
}
$newArr = collectValue($arr);
Спустя 34 минуты, 54 секунды (23.03.2011 - 10:51) Snus написал(а):
linker
Чем лучше? Я пока особой разницы не вижу.
Чем лучше? Я пока особой разницы не вижу.
Спустя 2 часа, 29 минут (23.03.2011 - 13:20) linker написал(а):
Глядя на
collectValue($arr, 'newArr');один черт догадается, что на выходе результат запишется в $newArr.
Спустя 5 минут, 21 секунда (23.03.2011 - 13:25) sergeiss написал(а):
Я самое главное не понял: область применения этой функции какая?
Спустя 3 часа, 50 минут, 35 секунд (23.03.2011 - 17:16) Snus написал(а):
linker
Я же в описании написал.
Я же в описании написал.
Цитата |
arrName - массив с собранными данными (по дефолту collectValues) |
sergeiss
Отладка. Бывает такое, что мне нужно проверить, чтобы в многомерном массиве не было значений больше 300 символов. Или наоборот. Да много примеров привести можно.