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

时间:2012-08-07 18:35:58

标签: 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存在,我需要得到它后面的值。如果存在A和B,它们也将始终具有相同的值(A和B)。

EDIT2:根据PeeHaa的建议,这正是我目前的尝试。 A是“已注册:当前”,B是“已注册:下一步”。在他的测试中,他获得了A之后但是在B之前的值,但是在我的测试中我只得到A的值(“已注册:当前”)。它只输出“registered:current”而不是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);
}

3 个答案:

答案 0 :(得分:3)

我认为这应该有效:

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

您可能希望像这样使用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&amp; B是否存在以及验证它们是否以正确的顺序发生(即$ offset&gt; = 0且$ slice_length&gt; 0)< / p>