|
Posted by Daz on 05/07/07 16:09
On May 7, 4:40 pm, dennis.spreng...@gmail.com wrote:
> Wow, thanks! It works great. I will spend the next hour or so trying
> to understand what code you wrote and why I still can't come up with
> stuff solutions that :-)
>
> On 7 mei, 17:32, ZeldorBlat <zeldorb...@gmail.com> wrote:
>
> > On May 7, 11:05 am, dennis.spreng...@gmail.com wrote:
>
> > > Consider the following multi-dimensional array:
> > > ---------------------------
> > > $arr = array(
> > > array(3, 5, 7, 9),
> > > array(2, 4, 6, 8),
> > > array(1, 3, 5, 7)
> > > );
>
> > > function add_arrays($arr) {
> > > for ($row = 0; $row < count($arr[0]); $row++) {
> > > for ($column = 0; $column < count($arr[$column]); $column++) {
> > > $totals[$row] = $totals[$row] + $arr[$column][$row];
> > > }
> > > }
> > > print_r($totals);
>
> > > }
>
> > > add_arrays($arr);
> > > ---------------------------
> > > This returns the following array:
> > > Array ( [0] => 6 [1] => 12 [2] => 18 [3] => 24 )
>
> > > These are the totals of the array's in $arr: 6 (3 + 2 + 1, added all
> > > first elements), 12 (5 + 4 + 3, added all second elements), etc. This
> > > took me quite a portion of the day to construct ;) However, I would
> > > like add_arrays to return a multidimensional array like this:
>
> > > Array (
> > > Array ( [0] => 3 [1] => 5 [2] => 7 [3] => 9 ) // 1st row
> > > Array ( [0] => 5 [1] => 9 [2] => 13 [3] => 17 ) // 1st row + second
> > > row (i.e. 5 = 3 + 2)
> > > Array ( [0] => 6 [1] => 12 [2] => 18 [3] => 24 ) // 1st _ 2nd + 3rd
> > > row (i.e. 6 = 3 + 2 + 1)
> > > )
>
> > > Could somebody please help me building a function that does just that?
> > > Adding one row to the previous one and adding the result to the output
> > > array? Any help would be greatly apprectiated!
>
> > Here's one way. Obviously there are others, also.
>
> > function add_arrays_cumulative($arr) {
> > $out = array();
>
> > for($i = 0; $i < count($arr); $i++) {
> > if(!isset($out[$i]))
> > $out[$i] = array();
>
> > for($j = 0; $j < count($arr[$i]); $j++)
> > $out[$i][$j] = $arr[$i][$j] + (isset($out[$i-1][$j]) ?
> > $out[$i-1][$j] : 0);
> > }
>
> > return $out;
>
> > }
Here's my version with comments. I posted it anyway, as it would have
been a waste of time for me not to. I think it's identical to the
example above, but it's a little longer...
<?php
$arr = array(
array(3, 5, 7, 9),
array(2, 4, 6, 8),
array(1, 3, 5, 7)
);
function add_arrays($input_array) {
// Cteate a new tmp_array in the global scope
// of the function.
$tmp_array;
// Create out array which will be returned
$out_array = array();
// Add the first row of $arr
$out_array[] = $input_array[0];
// For each array from the second array in $arr...
//echo "<pre>",print_r($input_array[0]),"</pre>";
for ($row = 1; $row < sizeof($input_array); $row++) {
// Create a new array
$tmp_array = array();
// Now, for each key in the current $arr row...
for ($key_num = 0; $key_num < sizeof($input_array[$row]); $key_num+
+) {
// Add the values of $input_array[$row-1][$key_num] to the values
// of the array in $output_array before ($out_array[$row]
[$key_num])
$tmp_array[$key_num] = $input_array[$row][$key_num] +
$out_array[$row-1][$key_num];
}
// Append the $tmp_array to the $output_array
$out_array[] = $tmp_array;
}
return $out_array;
}
$result= add_arrays($arr);
echo 'Contents of $result: <br />';
echo "<pre>Array 1:<br />",print_r($result[0]),"</pre>";
echo "<pre>Array 2:<br />",print_r($result[1]),"</pre>";
echo "<pre>Array 3:<br />",print_r($result[2]),"</pre>";
?>
Navigation:
[Reply to this message]
|