Hallo,
Ik heb de volgende array, dit zijn bezette dagen in een kalender.
Nu wil ik bv voor deze array 3 arrays maken.

Nu ben ik met een forloop aan het testen maar krijg het niet voor elkaar.
Iemand een idee hoe ik dat kan doen?


$data = array( 3,4,5,6,16,17,18,19,20,23,24,25,26 );
$firstday = reset( $data );
$lastday = end( $data );





for( $x = $firstday;$x <= $lastday; $x++ ){
    $key = array_search( $x, $data);
    //echo $x;
    if( $key == false ){
        //echo $x;
    }
    else{
        //echo 0;
    }
    
}


output:
$output1 = array(3,4,5,6);
$output2 = array(16,17,18,19,20);
$output3 = array(23,24,25,26);
Wat moet er in die drie array's komen? Of anders gezegd: volgens welke logica belandt een bezette dag in één van de drie array's? En waarom drie array's?

Als je specifiek de functie array_slice() moet gebruiken, kan dat bijvoorbeeld zo:


<?php
// Array met bezette dagen
$data = array(3, 4, 5, 6, 16, 17, 18, 19, 20, 23, 24, 25, 26);
// Voor de zekerheid sorteren voor een chronologische volgorde
sort($data);
// Eerste en laatste vier bezette dagen
$eerste_vier_dagen  = array_slice($data, 0, 4);
$laatste_vier_dagen = array_slice($data, -4, 4);
?>
Dank voor je reactie Ward!
Dit is de boeling:
Deze

$data = array( 3,4,5,6,16,17,18,19,20,23,24,25,26 );

Moet worden:

$output1 = array(3,4,5,6);
$output2 = array(16,17,18,19,20);
$output3 = array(23,24,25,26);
Dat had ik gezien, maar waarom bevat de eerste array 4 dagen, de tweede 5 dagen en de derde weer 4 dagen? Welke logica zit erachter?

Hoe zou de verdeling bijvoorbeeld worden als een andere maand andere bezette dagen heeft? Of stel dat dag 11 ook bezet is; komt die dan in de eerste of de tweede array?
$data = bv 1 hotel die bezet is op 3,4,5,6,16,17,18,19,20,23,24,25,26 dus de andere dagen zijn vrij.
Bas D L op 28/09/2013 11:52:13

$data = bv 1 hotel die bezet is op 3,4,5,6,16,17,18,19,20,23,24,25,26 dus de andere dagen zijn vrij.

Duidelijk, maar waarom moet je daarvan dan drie verschillende array's maken? Je hebt er voor een boekingssysteem immers maar één nodig: de bezette dagen, want daaruit kun je ook de niet-bezette dagen afleiden.

Meer programmeertechnisch kun je daarvoor nog een argument aanvoeren. Als je variabelen gaat nummeren — zoals hier $output1, $output2 en $output3 — dan deugt het datamodel vaak niet. Wat moet er met die $output1, $output2 en $output3 gebeuren dat je niet kunt bereiken met alleen $data?

Als je trouwens een zuiver numerieke verdeling wilt, dan kan dat als volgt.


<?php
// Array met bezette dagen
$data = array(3, 4, 5, 6, 16, 17, 18, 19, 20, 23, 24, 25, 26);
// Alle dagen langslopen met behoud van de array-sleutel
// zodat $output nog is terug te koppelen aan $data
foreach ($data as $key => $value) {
    if ($value <= 10) {              // 1 t/m 10
        $output[1][$key] = $value;
    } elseif ($value <= 20) {        // 11 t/m 20
        $output[2][$key] = $value;
    } else {                         // 21 t/m 31
        $output[3][$key] = $value;
    }
}

// Voor tests
echo '<pre>';
print_r($output);
?>

Reageren