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は「registered:current」、Bは「registered:next」です。彼のテストでは、彼はAの後、Bの前の値を取得していますが、私のテストでは、Aの値( "registered:current")のみを取得しています。2つのマーカーの間に存在する値の代わりに、「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);
}
4

3 に答える 3

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 に答える
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 に答える
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 に答える