如何在 PHP 中检索 2 个标记之间的数组值


how can I retrieve the values of an array between 2 markers in PHP?

我有一个值数组,都是字符串。数组中还有 2 个"标记"条目,表示后面的值是什么。基本上它的设置是这样的:

$array['1','2','3','A','5','6','7','B','8','9']

我需要在 A之后但在 B之前检索数组索引。因此,在此示例中,索引为 5、6 和 7。

我正在考虑使用 forloop 和一些迭代的 if 语句来做到这一点。但我似乎想不通。任何帮助都非常感谢:)

编辑:还值得注意的是,A和B在

数组中并不总是处于同一位置;有些用户在A和B之间会比其他人拥有更多的数据,有些用户根本没有A和B。但是如果 A 存在,我需要获取它后面的值。如果存在 A 和 B,它们也将始终具有相同的值(A 和 B)。

编辑2:这是我目前正在根据PeeHaa的建议尝试的。A 是"已注册:当前",B 是"已注册:下一个"。在他的测试中,他得到了 A 之后但在 B 之前的值,但是在我的测试中,我只得到了 A 的值("注册:当前")。它只输出"注册:当前",而不是存在于 2 个标记之间的值。

function getValuesBetweenMarkers($theArray, $startMarker = 'registered:current', $endMarker = 'registered:next')
{
    $offset = array_search($startMarker, $theArray) + 1;
    $length = array_search($endMarker, $theArray) - $offset;
    return array_slice($theArray, $offset, $length, true);
}

我认为这应该有效:

$result = array();
$start = "A";
$stop = "B";
$push = false;
foreach($array as $value) {
    if ($value == $start) {
         $push = true;
    } else if ($value == $stop) {
        break;
    }
    if ($push) {
        $result[] = $value;
    }
}
function getValuesBetweenMarkers($theArray, $startMarker = 'A', $endMarker = 'B')
{
    $offset = array_search($startMarker, $theArray) + 1;
    $length = array_search($endMarker, $theArray) - $offset;
    return array_slice($theArray, $offset, $length, true);
}
$array = array('1','2','3','A','5','6','7','B','8','9');
var_dump(getValuesBetweenMarkers($array));
你可能

想像这样使用array_search()和array_slice():

$index_a = array_search('A', $array);
$index_b = array_search('B', $array);
$offset = $index_a + 1;
$slice_length = $index_b - $offset;
$final_array = array_slice($array, $offset, $slice_length);

当然,您可能希望添加更多逻辑来验证 A&B 是否存在,并验证它们以正确的顺序出现(即 $offset>=0 和 $slice_length> 0)