2

我有一个值数组,所有字符串。数组中还有 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 的值(“注册:当前”)。它只输出“注册:当前”而不是两个标记之间存在的值。

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

3 回答 3

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));
于 2012-08-07T18:47:52.870 回答
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;
    }
}
于 2012-08-07T18:41:23.610 回答
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&B 都存在以及验证它们以正确的顺序出现(即 $offset >=0 和 $slice_length > 0)

于 2012-08-07T18:43:18.073 回答