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

如何在PHP中检索两个标记之间的数组值?,php,arrays,loops,Php,Arrays,Loops,我有一个值数组,所有的字符串。数组中还有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存在,我需要得

我有一个值数组,所有的字符串。数组中还有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)

EDIT2:根据PeeHaa的建议,这就是我目前正在尝试的。A为“已注册:当前”,B为“已注册:下一个”。在他的测试中,他得到的值在A之后但在B之前,然而在我的测试中,我只得到A的值(“注册:当前”)。它只输出“registered:current”,而不是两个标记之间存在的值

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

您可能希望像这样利用数组_search()和数组_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)

您能告诉我们您尝试了什么吗?为什么没有3个单独的阵列?看起来比需要的复杂多了be@Esailija它比需要的更复杂。不幸的是,这就是从LDAP返回数据的方式,我只是将其直接存储到一个变量中。您想要索引/键(
4
5
6
)还是值(
5
6
7
)?@salathi抱歉没有说得更清楚。我想要A和B之间索引的字符串值,所以5,6,7:)我尝试使用这个方法,但是我遇到了一些问题。。结果输出总是在我想要的值之前一个值。。因此,这不是输出“5,6,7”,而是为我输出“A”。我尝试了在这之前发布的其他一些,但都不起作用。这一个成功了!非常感谢。
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));