2017-01-12 4 views
0

Ich habe Array wie folgt:Split assoziatives Array von Schlüssel

private $schedule = [ 
    "13:00" => true, 
    "13:30" => false, 
    "14:00" => true, 
    "14:30" => true, 
    "15:00" => true, 
    "15:30" => true, 
    "16:00" => true, 
] 

Zum Beispiel aktuelle Zeit "14.00 Uhr".

ich will, ist dieses Array in zwei Arrays aufgeteilt:

vor "14.00 Uhr"

private $schedule1 = [ 
    "13:00" => true, 
    "13:30" => false, 
    "14:00" => true 
] 

nach "14.00 Uhr"

private $schedule2 = [ 
    "14:30" => true, 
    "15:00" => true, 
    "15:30" => true, 
    "16:00" => true, 
] 

Gibt es Art und Weise zu tun, das mit dem Schlüssel ("14:00")?

+4

'$ before1400 = array_filter ($ Zeitplan, function ($ key) {return $ key <= '14: 00' ;}, ARRAY_FILTER_USE_KEY) ; $ after1400 = array_filter ($ schedule, funktion ($ key) {return $ key> '14: 00 ';}, ARRAY_FILTER_USE_KEY); ' –

+1

@MarkBaker hat die perfekte Lösung gefunden. Post es als Antwort –

+0

möglich in PHP-Version> 5.6.0 – jitendrapurohit

Antwort

0

Beste Antwort von @ Mark Baker

$before1400 = array_filter($schedule, function($key) { 
    return $key <= '14:00'; }, 
ARRAY_FILTER_USE_KEY); 

$after1400 = array_filter($schedule, function($key) { 
    return $key > '14:00'; }, 
ARRAY_FILTER_USE_KEY); 
+0

markieren Sie diese Antwort nur als akzeptierte Antwort. –

2

Sie können foreach verwenden. Ergebnis: https://eval.in/714864

<?php 

$schedule = [ 
    "13:00" => true, 
    "13:30" => false, 
    "14:00" => true, 
    "14:30" => true, 
    "15:00" => true, 
    "15:30" => true, 
    "16:00" => true, 
]; 


$schedule1 = []; 
$schedule2 = []; 

$current_time = "14:00"; //date("H:i"); 

echo 'Current Time: '. $current_time; 

echo '<br />'; 


foreach($schedule as $key => $val){ 
    if($key<=$current_time){ 
     $schedule1[$key] = $val; 
    }else{ 
     $schedule2[$key] = $val; 
    } 
} 

print_r($schedule); 

echo '<br />'; 

print_r($schedule1); 

echo '<br />'; 

print_r($schedule2); 
2

Einfache foreach() Iteration mit einer Fahne könnte dies erreichen: -

$curr = '14:00'; 
$schedule1 = $schedule2 = array(); 
//maintain a flag which would track when the required time key is reached 
$timeReached = FALSE; 

foreach ($schedule as $key => $val) { 
    if (!$timeReached) { 
    $schedule1[$key] = $val; 
    } 
    else { 
    $schedule2[$key] = $val; 
    } 
    //set the flag when the key is reached. 
    if ($key == $curr) { 
    $timeReached = TRUE; 
    } 
} 

print_r($schedule1); 
print_r($schedule2); // would be the required array. 
1

Eine einfache Funktion mit einer foreach Schleife der Schlüssel zu überprüfen, könnte es lösen. Sie können so etwas wie versuchen:

$schedule = [ 
    "13:00" => true, 
    "13:30" => false, 
    "14:00" => true, 
    "14:30" => true, 
    "15:00" => true, 
    "15:30" => true, 
    "16:00" => true, 
] 

function array_split($array, $delimiter) { 
    $first_half = []; 
    $second_half = []; 

    foreach (array_keys($array) as $key) { 
     if ($key < $delimiter) { 
     $first_half[$key] = $array[$key]; 
     } 
     else { 
     $second_half[$key] = $array[$key]; 
     } 
    } 

    return [$first_half, $second_half]; 
} 

list($first_half, $second_half) = array_split($schedule, '14:00'); 

oder Sie können mit nur ein paar Anrufe zu array_filter abschaffen:

$first_half = array_filter($schedule, function($key) { return $key <= '14:00'; }, ARRAY_FILTER_USE_KEY); 
$second_half = array_filter($schedule, function($key) { return $key '14:00'; }, ARRAY_FILTER_USE_KEY); 
0

Sie können andere Art und Weise versuchen, wie: -

$schedule1 = []; 
$schedule2 = []; 
$flag  = false; 
foreach ($schedule as $k => $v) { 
    if ($k == date("H:i")) { 
     $schedule1[] = $v; 
     $flag  = true; 
    } 
    if ($flag) { 
     $schedule2[] = $v; 
    } else { 
     $schedule1[] = $v; 
    } 
} 

Diese Code funktioniert auch für zufällige Schlüssel. Versuche es.

Verwandte Themen