Karan Adhikari
Karan Adhikari

Reputation: 485

Combine same indexes of array

I have an array which as dynamic nested indexes in e.g. I am just using 2 nested indexes.

Array
(
    [0] => Array
        (
            [0] => 41373
            [1] => 41371
            [2] => 41369
            [3] => 41370
        )

    [1] => Array
        (
            [0] => 41378
            [1] => 41377
            [2] => 41376
            [3] => 41375
        )


)

Now I want to create a single array like below. This will have 1st index of first array then 1st index of 2nd array, 2nd index of first array then 2nd index of 2nd array, and so on. See below

array(

    [0] =>41373
    [1] => 41378
    [2] => 41371
    [3] => 41377
    [4] => 41369
    [5] => 41376
    [6] => 41370
    [7] => 41375
  ) 

Upvotes: 0

Views: 52

Answers (5)

sina maleki
sina maleki

Reputation: 25

this would be the simplest solution:

$firstarr = ['41373','41371','41369','41370'];
$secondarr = ['41378','41377','41376','41375'];
$allcounged = count($firstarr)+count($secondarr);
$dividedintotwo = $allcounged/2;
$i = 0;
while ($i<$dividedintotwo) {
echo $firstarr[$i]."<br>";
echo $secondarr[$i]."<br>";
$i++;
}

Upvotes: 0

FatFreddy
FatFreddy

Reputation: 1210

first count the arrays in the given array, then count the elements in the first array, than loop over that. All arrays should have the same length, or the first one should be the longest.

$laArray   = [
        ['41373','41371','41369','41370'],
        ['41378', '41377', '41376', '41375'],
        ['43378', '43377', '43376', '43375'],
    ];

$lnNested   = count($laArray);
$lnElements = count($laArray[0]);
$laResult   = []; 

for($lnOuter = 0;$lnOuter < $lnElements; $lnOuter++) {
    for($lnInner = 0; $lnInner < $lnNested; $lnInner++) {
        if(isset($laArray[$lnInner][$lnOuter])) {
            $laResult[] = $laArray[$lnInner][$lnOuter];
        }
    }
}

Upvotes: 0

Brandon Nelson
Brandon Nelson

Reputation: 103

$array1 = ['41373','41371','41369','41370'];
$array2 = ['41378','41377', '41376', '41375'];

$return = array();
$count = count($array1)+count($array2);
for($i=0;$i<($count);$i++){
    if($i%2==1){
        array_push($return, array_shift($array1));
    }
    else {
        array_push($return, array_shift($array2));
    }
}


print_r($return);

Upvotes: 0

Nerea
Nerea

Reputation: 2157

You can do something like this:

$results = [];
$array = [[1,2,3,4], [1,2,3,4], [1,2,3,4]];
$count = 1;
$size = count($array)-1;
foreach ($array[0] as $key => $value)
{
    $results[] = $value;
    while($count <=  $size)
    {
        $results[] = $array[$count][$key];
        $count++;
    }
    $count = 1;
}

Upvotes: 3

tarkik
tarkik

Reputation: 101

I think you need something like this:

function dd(array $arrays): array
{
    $bufferArray = [];
    foreach($arrays as $array) {
        $bufferArray = array_merge_recursive($bufferArray, $array);
    }

    return $bufferArray;
}

Upvotes: 0

Related Questions