Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按键拆分关联数组_Php - Fatal编程技术网

Php 按键拆分关联数组

Php 按键拆分关联数组,php,Php,我有这样的数组: private $schedule = [ "13:00" => true, "13:30" => false, "14:00" => true, "14:30" => true, "15:00" => true, "15:30" => true, "16:00" => true, ] 例如,当前时间是14:00 我想将此阵列拆分为两个阵列: 14点之前 private $sc

我有这样的数组:

private $schedule = [
    "13:00" => true,
    "13:30" => false,
    "14:00" => true,
    "14:30" => true,
    "15:00" => true,
    "15:30" => true,
    "16:00" => true,
]
例如,当前时间是14:00

我想将此阵列拆分为两个阵列:

14点之前

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

private $schedule2 = [
   "14:30" => true,
   "15:00" => true,
   "15:30" => true,
   "16:00" => true,
]
有办法在14:00前完成吗

您可以使用foreach。结果:

你可以用foreach。结果:

带有标志的简单foreach迭代可以实现以下目标:-

$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.
带有标志的简单foreach迭代可以实现以下目标:-

$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.
使用foreach循环检查键的简单函数可以解决此问题。您可以尝试以下方法:

  $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');
使用foreach循环检查键的简单函数可以解决此问题。您可以尝试以下方法:

  $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');

您可以尝试其他方式,如:-

$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;
    }
}

此代码甚至适用于随机键。试试看。

您可以通过以下其他方式进行尝试:-

$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;
    }
}
$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);

此代码甚至适用于随机键。试一试。

$before1400=array\u filter$schedule,函数$key{return$key'14:00';},array\u filter\u USE\u key@马克贝克想出了完美的解决方案。在php version>5.6.0Pasha中将其作为答案发布。下面有许多答案。检查它们,并试着为你正确的一票打上标记。如果其他人也有用,你也可以为他们投票。Thanks@MarkBaker,谢谢,工作正常。$before1400=数组_过滤器$schedule,函数$key{return$key'14:00';},数组_过滤器_使用_键@马克贝克想出了完美的解决方案。在php version>5.6.0Pasha中将其作为答案发布。下面有许多答案。检查它们,并试着为你正确的一票打上标记。如果其他人也有用,你也可以为他们投票。Thanks@MarkBaker,谢谢,效果很好。虽然此代码可以回答此问题,但提供有关此代码为什么和/或如何回答此问题的其他上下文可以提高其长期价值。虽然此代码可以回答此问题,提供关于此代码为什么和/或如何回答此问题的附加上下文可提高其长期价值。
$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);