[Solved] create another multi dimensional array from an array


while I’m pretty sure this is a homework assignment and well, you really should provide code of your own, at least try to, I found the thing amusing so I went ahead and gave it a try. I guess I’ll be downvoted for his and I probably do deserve it, but here goes anyway.

What you need to do is:

  1. loop through your array,
  2. determine the elements that give you 32 and then store that result in the final array.
  3. subtract the value of the last element from your result from the corresponding element of your working array
  4. shrink your array next by deleting the first elements until the very first element of the array you’re still working with equals the last element your last result returned.
  5. if your last result < 32, quit.

With this in mind, please try to find a solution yourself first and don’t just copy-paste the code? 🙂

<?php

$x = array('A'=>31, 'B'=>12, 'C'=>13, 'D'=>25, 'E'=>18, 'F'=>10);
$result = array();


function calc($toWalk){
// walk through the array until we have gathered enough for 32, return result as   an array
$result = array();

foreach($toWalk as $key => $value){
    $count = array_sum($result);
    if($count >= 32){
        // if we have more than 32, subtract the overage from the last array element
        $last = array_pop(array_keys($result));
        $result[$last] -= ($count - 32);
        return $result;  
    }
    $result[$key] = $value;
}
return $result; 
}


// logic match first element
$last="A";
// loop for as long as we have an array
while(count($x) > 0){

/* 
we make sure that the first element matches the last element of the previously found array
so that if the last one went from A -> C we start at C and not at B
*/
$keys = array_keys($x);
if($last == $keys[0]){
    // get the sub-array
    $partial = calc($x);
    // determine the last key used, it's our new starting point
    $last = array_pop(array_keys($partial));
    $result[] = $partial;




            //subtract last (partial) value used from corresponding key in working array
            $x[$last] -= $partial[$last];

    if(array_sum($partial) < 32) break;
}
/* 
    reduce the array in size by 1, dropping the first element
    should our resulting first element not match the previously returned
    $last element then the logic will jump to this place again and
    just cut off another element
*/
$x = array_slice($x , 1 );
}

print_r($result);

3

solved create another multi dimensional array from an array