2

I want to merge 3 arrays.

My first one is:

Array ( [0] => Leaves-19 [1] => Shifts-1 [2] => Shifts-1 [3] => Shifts-1 [4] => Shifts-1 [5] => Shifts-1 [6] => Leaves-19 [7] => Leaves-19 [8] => Shifts-1 [9] => Shifts-1 [10] => Shifts-1 [11] => Shifts-1 [12] => Shifts-1 [13] => Leaves-19 [14] => Leaves-19 [15] => Shifts-1 [16] => Shifts-1 [17] => Shifts-1 [18] => Shifts-1 [19] => Shifts-1 [20] => Leaves-19 [21] => Leaves-19 [22] => Shifts-1 [23] => Shifts-1 [24] => Shifts-1 [25] => Shifts-1 [26] => Shifts-1 [27] => Leaves-19 [28] => Leaves-19 [29] => Shifts-1 [30] => Shifts-1 [31] => Shifts-1 [32] => Shifts-1 [33] => Shifts-1 [34] => Leaves-19 [35] => Leaves-19 [36] => Shifts-1 [37] => Shifts-1 [38] => Shifts-1 [39] => Shifts-1 [40] => Shifts-1 [41] => Leaves-19 )

My second is:

Array ( [0] => 2013-04-28 [1] => 2013-04-29 [2] => 2013-04-30 [3] => 2013-05-01 [4] => 2013-05-02 [5] => 2013-05-03 [6] => 2013-05-04 )

The third one is:

Array ( [0] => 13 [1] => 10 [2] => 12 [3] => 9 [4] => 14 [5] => 11 )

I want:

  • 2013-04-28 / 13 / Leaves-19
  • 2013-04-29 / 13 / Shifts-1
  • 2013-04-30 / 13 / Shifts-1
  • 2013-05-01 / 13 / Shifts-1
  • 2013-05-02 / 13 / Shifts-1
  • 2013-05-03 / 13 / Shifts-1
  • 2013-05-04 / 13 / Leaves-19
  • 2013-04-28 / 10 / Leaves-19
  • 2013-04-29 / 10 / Shifts-1
  • 2013-04-30 / 10 / Shifts-1
  • 2013-05-01 / 10 / Shifts-1
  • 2013-05-02 / 10 / Shifts-1
  • 2013-05-03 / 10 / Shifts-1
  • 2013-05-04 / 10 / Leaves-19
  • ...

Thansk for help.


What I tryed:

echo print_r($_POST['dayType'])."<hr />";
echo print_r($_POST['dayArr'])."<hr />";
echo print_r($_POST['userArr'])."<hr />";

//echo count($_POST['dayType'])." --- ".count($_POST['dayArr'])." --- ".count($_POST['userArr']);

// 2013-05-04 / 13 / Leaves-19
$loopNb1 = count($_POST['dayType']);
$loopNb2 = count($_POST['dayType'])/7;

for($a=0; $a<$loopNb1; $a++) {
    echo $_POST['dayType'][$a]."<br />";
}

echo "<hr />";

for($b=0; $b<$loopNb2; $b++) {
    echo $_POST['userArr'][1]."<br />";
}
Francois
  • 15
  • 5

3 Answers3

1

Get an idea-

//Your array
$a = array(1, 2, 3, 4, 5, 6,7,8);
$b = array("one", "two", "three", "four", "five",'123', 'asdfsadf');
$c = array("uno", "dos", "tres", "cuatro", "cinco", 'jina');


function myFunc($first, $second, $third) {
    if (!empty($first) && !empty($second) && !empty($second)) {
        return $first . '/' . $second . '/'. $third;
    }
}

// get the lowest size of array
$minimumSize = min(count($a), count($b), count($c));

//modify array in terms of lowest size
$firstArray = array_slice($a, 0, $minimumSize);
$secondArray = array_slice($b, 0, $minimumSize);
$thirdArray = array_slice($c, 0, $minimumSize);

$d = array_map('myFunc', $firstArray, $secondArray, $thirdArray);
smm
  • 527
  • 5
  • 17
1

First/second/third arrays are the same that you pasted (Same order).

$datesCount        = count( $secondArray );
$firstArrayLength  = count( $firstArray );
$thirdArrayLength  = count( $thirdArray );

for( $i=0 ; $i < $thirdArrayLength ; $i++ )
{
    $currentThirdArrayValue = $thirdArray[$i];

    for( $inner=0, $firstArrayIndex=0 ; $inner < $datesCount ; $inner++, $firstArrayIndex++ )
    {
        if( $firstArrayIndex == $firstArrayLength )
                $firstArrayIndex = 0;

        echo "{$secondArray[$inner]} / {$currentThirdArrayValue} / {$firstArray[$firstArrayIndex]}<br/>\n";
    }
}

Will give you:

2013-04-28 / 13 / Leaves-19<br/>
2013-04-29 / 13 / Shifts-1<br/>
2013-04-30 / 13 / Shifts-1<br/>
2013-05-01 / 13 / Shifts-1<br/>
2013-05-02 / 13 / Shifts-1<br/>
2013-05-03 / 13 / Shifts-1<br/>
2013-05-04 / 13 / Leaves-19<br/>
2013-04-28 / 10 / Leaves-19<br/>
2013-04-29 / 10 / Shifts-1<br/>
2013-04-30 / 10 / Shifts-1<br/>
2013-05-01 / 10 / Shifts-1<br/>
2013-05-02 / 10 / Shifts-1<br/>
2013-05-03 / 10 / Shifts-1<br/>
2013-05-04 / 10 / Leaves-19<br/>

etc... ending with:

2013-05-01 / 11 / Shifts-1<br/>
2013-05-02 / 11 / Shifts-1<br/>
2013-05-03 / 11 / Shifts-1<br/>
2013-05-04 / 11 / Leaves-19<br/>
elvena
  • 411
  • 3
  • 5
  • I really need to make like in my example. :( – Francois May 04 '13 at 19:44
  • Hm, I see what you mean, the fix should be to loop over the dates array and just check if the other two are going to be above their last item and reset the array. -- Want me to modify it? – elvena May 04 '13 at 19:54
  • It would be so appreciated please. Thanks. – Francois May 04 '13 at 19:55
  • Sure, a simple clarification, before your first "..." is 2013-05-04 / 13 / Leaves-19, which is the next value you expect? – elvena May 04 '13 at 20:03
  • Yes, I just put ... to separate them. :) Thanks. – Francois May 04 '13 at 20:05
  • Totally what I expected! Thanks a lot! – Francois May 04 '13 at 20:25
  • Hi Elvena. There's a trouble if for each user datas (1st array) are not the same. In my example they are but not in reality. Could you please help me? Thanks. – Francois May 05 '13 at 12:38
  • If you take a look here http://codepad.org/XoBmnHFr you ll see that Shifts-5 is repeating again and again whereas in my array he is here just one time... Could you please help? Thanks. – Francois May 05 '13 at 14:00
  • Check if this is what you are looking for ? http://codepad.org/6eRwyyZb – elvena May 05 '13 at 19:00
1

If you want all combinations from those 3 arrays (call them $first, $second, $third), you can do something like this:

foreach($first as $a){
 foreach($second as $b){
   foreach($third as $c{
     //do whatever you want with $a,$b,$c
     echo "$a/$b/$c";
   }
 }  
} 
Axarydax
  • 16,353
  • 21
  • 92
  • 151
  • Thanks but I need to keep relation between informations. Elvena code work like a charm but not for the 1st array if datas are not the same between users, Do your understand? Could your please help? Thanks. – Francois May 05 '13 at 13:22
  • does this data by any chance come from a database? Isn't it better to solve the problem *in* the database instead of PHP? – Axarydax May 05 '13 at 13:23
  • This is to save this sort of table http://www.send-picture.com/upload/Screen-Shot-2013-05-04-at-5.24.46-PM.jpg – Francois May 05 '13 at 13:25
  • I really don't understand the connection between the first array (which has indices from [0] => Leaves-19 [1] => Shifts-1 ... [40] => Shifts-1 [41] => Leaves-19) what does the index 40 and 41 mean for example? – Axarydax May 05 '13 at 13:32
  • 1
    Ok. First array array the day the user need to make (for example Shifts-41 is from 9am to 5pm). Second array is to know wich date are in the current view/table. The third one is for user. I know that in one week there's 7 days. My first array got 42 datas. 42/7=6. I have 6 users. I want for each date, for each user, each type of day he needs to make. With it solution Elvena was so close but there a trouble with day type if there are not the same for users. – Francois May 05 '13 at 13:42
  • If you take a look here http://codepad.org/XoBmnHFr you ll see that Shifts-5 is repeating again and again whereas in my array he is here just one time... Could you please help? Thanks. – Francois May 05 '13 at 13:58