Sign up ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

I'm writing a PHP function to collect data from different positions in a given array. I've done it as follows which gives me what I require.

for ($a=9; $a < 13; $a++) {
     $n = $arr[$a][2];
     $p = $arr[$a][3];
     $c = $p;
     $v1[] = array($n,$p,$c);
}

for ($b=3; $b < 16; $b+=4) {
 $h = $arr[6][$b];  
     $m = $arr[5][$b]; 
     $l = $arr[4][$b];
     $v2[] = array($h,$m,$l);
}

foreach ($v1 as $k=>$o) {
    $r[] = array( 'na'=> $o[0], 'pr'=> $o[1], 'cu' => $o[2], 'val1' => $v2[$k][0], 'val2' => $v2[$k][1], 'val3' => $v2[$k][2]);
}

To get the output in this format, without repeating the fields:

[0] = > Array 
           [na] => Text 
           [pr] => 1
           [cu] => Text
           [val1] => 1
           [val2] => 2
           [val3] => 3

[1] = > Array 
           ....
           ....

[3] = > Array
           [na] => Text3 
           [pr] => 1-3
           [cu] => Text-22
           [val1] => 101
           [val2] => 22
           [val3] => 34

Is there a better, more efficient way to do this?

share|improve this question

migrated from stackoverflow.com Jun 27 '14 at 14:15

This question came from our site for professional and enthusiast programmers.

    
I think there's a mistake on this line: $c = $arr[$a][3]);. Shouldn't that parenthesis be removed, and shouldn't the index be 4 instead of 3 (it's currently the same as the line above it) ? –  Joey Adams Jun 25 '14 at 16:11
    
yep, one value there has a manipulation on it, I deleted the function it calls, so my mistake with the ")" , changed the $c = $p; there also. –  user3510209 Jun 25 '14 at 16:16

2 Answers 2

up vote 3 down vote accepted

Should work (at least it doesn't look like a riddle anymore:)

for ($i = 0; $i < 4; $i++) {
    $a = $i + 9;
    $b = 3 + $i * 4;

    $r[] = array(
        'na'   => $arr[$a][2],
        'pr'   => $arr[$a][3],
        'cu'   => $arr[$a][3],
        'val1' => $arr[6][$b],
        'val2' => $arr[5][$b],
        'val3' => $arr[4][$b]
    );
}

if $r[..]['cu'] is some function result assign to function call directly.

share|improve this answer

From the answer of Scott Jungwirth, but a bit optimized :

for ($i=0; $i < 4; $i++)
{
    $a = $i + 9;
    $b = $i*4 + 3;
    $v1[] = array($arr[$a][2],$arr[$a][3],$arr[$a][3]);
    $v2[] = array($arr[6][$b],$arr[5][$b],$arr[4][$b]);
    $r[] = array(
                 'na'   => $o[0],
                 'pr'   => $o[1],
                 'cu'   => $o[2],
                 'val1' => $v2[$i][0],
                 'val2' => $v2[$i][1],
                 'val3' => $v2[$i][2],
                );
}

And i think that replacing the $a and $b variables in the brackets would make the code unreadable. So all credits for Scott Jungwirth, just saying that if you can avoid some useless variable assignment (ie reduce the used memory/time), try to !

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.