1
$arr = array(
  0 => array(
        0 => 'one',
        1 => 'two',
        2 => 'three'
        ),
  1 => array(
        0 => 'sun',
        1 => 'mon',
        2 => 'tues'
        ),
  2 => array(
        0 => 'jan',
        1 => 'feb',
        2 => 'march'
        )
  );

This is array, I want to result like this. An array has a sub-array and wants to change the value of subarray.

$arr = array(
  0 => array(
        0 => 'one',
        1 => 'sun',
        2 => 'jan'
        ),
  1 => array(
        0 => 'two',
        1 => 'mon',
        2 => 'feb'
        ),
  2 => array(
        0 => 'three',
        1 => 'tues',
        2 => 'march'
        )
  );

please provide me the solution. Thanks in advance!

Nasser Ali Karimi
  • 4,462
  • 6
  • 34
  • 77
Vikal Singh
  • 84
  • 1
  • 2
  • 10

4 Answers4

7

Try with this loop to handle your requirement

output

Array ( [0] => Array ( [0] => one [1] => sun [2] => jan ) [1] => Array ( [0] => two [1] => mon [2] => feb ) [2] => Array ( [0] => three [1] => tues [2] => march ) )

CODE

<?php 
$arr = array(
        0 => array(
                    0 => 'one',
                    1 => 'two',
                    2 => 'three'
                    ),
        1 => array(
                    0 => 'sun',
                    1 => 'mon',
                    2 => 'tues'
                    ),
        2 => array(
                    0 => 'jan',
                    1 => 'feb',
                    2 => 'march'
                    )
        );
    $newarray = [];
    $length = count($arr[0]); 
    foreach ($arr as $key => $value) {
        for ($i=0; $i < $length; $i++) { 
            $newarray[$i][$key] = $value[$i];

        }
        //break;
    }
    print_r($newarray);
Nasser Ali Karimi
  • 4,462
  • 6
  • 34
  • 77
0

to change the value of a sub array item you just add another [] part:

$arr[0][1] = 'sun';

Terry
  • 332
  • 1
  • 15
0

I made it in a recursive way.

$arr = array(
        0 => array(
                    0 => 'one',
                    1 => 'two',
                    2 => 'three'
                    ),
        1 => array(
                    0 => 'sun',
                    1 => 'mon',
                    2 => 'tues'
                    ),
        2 => array(
                    0 => 'jan',
                    1 => 'feb',
                    2 => 'march'
                    )
        );

$new_arr = array();
$nb = count($arr);
$i = 0;
while($nb > 0){
    $nb--;
    $val1 = $arr[0][$i];
    $val2 = $arr[1][$i];
    $val3 = $arr[2][$i];
    $new_array[] = array($val1, $val2, $val3);
    $i++;
}

print_r($new_array);

You can check it here http://sandbox.onlinephpfunctions.com/code/e9e87de78f7b9dbb6edc72340d60f8b31a77875f

executable
  • 3,365
  • 6
  • 24
  • 52
0

You can use array_map function with null as callback.

$arr = array_map(
  null,
  $arr[0],
  $arr[1],
  $arr[2]
);

print_r($arr);

//Output

Array
(
[0] => Array
    (
        [0] => one
        [1] => sun
        [2] => jan
    )

[1] => Array
    (
        [0] => two
        [1] => mon
        [2] => feb
    )

[2] => Array
    (
        [0] => three
        [1] => tues
        [2] => march
    )
)