Php 删除阵列中除第一个实例以外的所有am/pm

Php 删除阵列中除第一个实例以外的所有am/pm,php,arrays,time,Php,Arrays,Time,我有一个以美元为单位的时隙阵列: 10:00 am,11:00 am,12:00 pm,01:00 pm,02:00 pm,03:00 pm,04:00 pm 我想从阵列中删除除第一个实例以外的所有am/pm: 10:00 am,11:00,12:00 pm,01:00 pm,02:00,03:00, 04:00 str_replace()会将它们全部取出preg_replace允许我限制取出的数量,但不允许我取出除1以外的所有物品。我需要为此编写自己的函数吗?已经有优雅的解决方案了吗?您可

我有一个以美元为单位的时隙阵列:

10:00 am,11:00 am,12:00 pm,01:00 pm,02:00 pm,03:00 pm,04:00 pm
我想从阵列中删除除第一个实例以外的所有
am/pm

10:00 am,11:00,12:00 pm,01:00 pm,02:00,03:00, 04:00

str_replace()
会将它们全部取出
preg_replace
允许我限制取出的数量,但不允许我取出除1以外的所有物品。我需要为此编写自己的函数吗?已经有优雅的解决方案了吗?

您可以试试这个,它只保留您想要的第一个am/pm字符串:

$timeSlots = array(
    "10:00 am",
    "11:00 am",
    "12:00 pm",
    "01:00 pm",
    "02:00 pm",
    "03:00 pm",
    "04:00 pm"
);

$foundAm = false;
$foundPm = false;

foreach( $timeSlots as $index => $timeSlot ) {
    if( strpos( $timeSlot, "am" ) !== false && $foundAm === false ) {
            $foundAm = true;
            continue;
    } else if( strpos( $timeSlot, "pm" ) !== false && $foundPm === false ) {
            $foundPm = true;
            continue;
    }

     $timeSlots[$index] = trim( str_replace( array( "am", "pm" ) , "", $timeSlot ) );
}

echo "<pre>";
var_dump( $timeSlots );

echo implode( ",", $timeSlots );

若它是一个数组,我想这样的东西可以工作(当然只有在并没有设置键或者你们知道第一个键的情况下)


你想删除数组中的所有am和pm字符串,对吗?@CraigTucker很高兴听到:)
array(7) {
  [0]=>
  string(8) "10:00 am"
  [1]=>
  string(5) "11:00"
  [2]=>
  string(8) "12:00 pm"
  [3]=>
  string(5) "01:00"
  [4]=>
  string(5) "02:00"
  [5]=>
  string(5) "03:00"
  [6]=>
  string(5) "04:00"
}

10:00 am, 11:00, 12:00 pm, 01:00, 02:00, 03:00, 04:00
$times = array('10:00 am','11:00 am','12:00 pm','01:00 pm','02:00 pm','03:00 pm','04:00 pm');
foreach($times as $key => $time){
    if($key != 0){
        $search = array(" am", " pm");
        $times[$key] = str_replace($search, "", $time);
    }
    //So if the key is 0 (The first element) continue, else remove the am/pm
}