массив, определение разниц

zaartix

Новичок
массив, определение разниц

Этот пост можно назвать продолженнием
http://phpclub.ru/talk/showthread.php?s=&threadid=95157

Только вот отдельная задачка оттуда вычленяется:
имеем массив разных по длине одномерных массивов

PHP:
Array
(
    [0] => Array
        (
            [0] => 20
            [1] => 176
            [2] => 177
        )

    [1] => Array
        (
            [0] => 4
        )

    [2] => Array
        (
            [0] => 216
            [1] => 251
        )

)
необходимо получить следующий массив их него:
PHP:
Array
(
    [0] => Array
        (
            [0] => 20
            [1] => 4
            [2] => 216
        )

    [1] => Array
        (
            [0] => 20
            [1] => 4
            [2] => 251
        )

    [2] => Array
        (
            [0] => 174
            [1] => 4
            [2] => 216
        )
    [3] => Array
        (
            [0] => 176
            [1] => 4
            [2] => 251
        )
    [4] => Array
        (
            [0] => 177
            [1] => 4
            [2] => 216
        )
    [5] => Array
        (
            [0] => 177
            [1] => 4
            [2] => 251
        )
)
т.е. надо взять каждый элемент каждого массива для каждого из элементов массива :) то так сложнее понять :) имхо матрией выше нагляднее


если вдруг непонятно, поясню немного по-другому:
есть массив, можно посмотреть его реальный пример тут:
http://gold.1ya.ru/1.php

надо от него получить следующее (диффы - это то, что надо будет сделать как раз с получившимися элементами нового массива):
20-4-216 -> min 4, max 216, diff 212
20-4-251 -> min 4, max 251, diff 247
.....
20-48-216 -> min 20, max 216, diff 196
20-48-251 -> min 20, max 251, diff 231
.....
и т.д. по всем элементам

поясню

сравниваем (получаем массив, чтобы потом вычислить диффы):
1 элемент 1-го массива с 1-ым элементом 2-го массива и с 1-ым элементом 3-го массива (дальше определяем максимум, минимум и разницу)
1 элемент 1-го массива с 1-ым элементом 2-го массива и с 2-ым элементом 3-го массива
.....
1 элемент 1-го массива с 2-ым элементом 2-го массива и с 1-ым элементом 3-го массива
1 элемент 1-го массива с 2-ым элементом 2-го массива и с 2-ым элементом 3-го массива
и т.д.

-~{}~ 12.01.07 18:43:

есть решение

$pos - входной двумерный массив
$res - выходной двумерный массив

PHP:
$width=1;
foreach ($pos as $v) {
	$width = sizeof($v)*$width;
}
$depth = sizeof($pos);

for ($i=0;$i<$depth;$i++) {$idx[$i] = 0;}


$ptr = 0;
while ($ptr<$width) {
	for ($i=0;$i<$depth; $i++) {
		$res[$ptr][$i] = $pos[$i][$idx[$i]];
	}
	$idx[$depth-1]++;
	for ($i=$depth-1; $i>0 ;$i--){
		if ($idx[$i]>=sizeof($pos[$i])) {
			$idx[$i] = 0;
			$idx[$i-1]++;
		}
	}
	$ptr++;
}

echo '<pre>';
print_r($pos);
echo '</pre>';

echo '<pre>';
print_r($res);
echo '</pre>';
 

maxll

Новичок
рекурсивный подход:

PHP:
function recursion_f($inar, $ind, &$darr)
	{
		static $temparr;
		if (!is_array($temparr)) $temparr = Array();

		if ($ind > sizeof($inar)-1) return;
		foreach ($inar[$ind] as $wpos)
		{
			$temparr[$ind] = $wpos;
			if ($ind == sizeof($inar)-1) array_push($darr, $temparr);
			recursion_f($inar, $ind+1, &$darr);
		}
	}

	$diffArr = Array();
	recursion_f($pos, 0, $diffArr);
	
	echo '<pre>';
	print_r($diffArr);
	echo '</pre>';
 
Сверху