-1

PHPで特定のインデックスの後に配列内の要素を見つけることは可能ですか?どんな助けでも大歓迎です!

4

1 に答える 1

0

あなたの質問はかなり漠然としているため、答えはデータの構造によって異なります。シーケンシャル キーを持つ単純なインデックス付き配列がある場合は、配列のスライスを検索できます。

function array_search_from($needle, $haystack, $index_from)
{
    $array_to_search = array_slice($haystack, $index_from);

    $index = array_search($needle, $array_to_search);

    if ($index === false)
    {
        return $index;
    }

    return $index + $index_from;
}

.. または、スライスの作成を避けるために通常の for ループとして実装することもできます。

function array_search_from($needle, $haystack, $index_from)
{
    $len = count($haystack);

    for ($i = $index_from; $i < $len; $i++)
    {
        if ($haystack[$i] == $needle)
        {
            return $i;
        }
    }

    return false;
}

期待どおりに動作することをテストするには:

$array = array("one", "two", "three", "four", "one", "two");

var_dump(array_search_from("one", $array, 0));
var_dump(array_search_from("one", $array, 1));
var_dump(array_search_from("two", $array, 2));   

int(0)
int(4)
int(5)

次に、これを array_search_slice に展開し、おそらくもう少し優れたエラー チェックを追加できます (無効な引数が指定された場合に array_search が NULL を返すなど)。

おもしろいことに、PHP 連想配列もシーケンスなので、連想配列でも同じことができます。

function array_search_from($needle, $haystack, $from)
{
    $searching = false;

    foreach ($haystack as $key => $value)
    {
        if ($key == $from)
        {
            $searching = true;
        }

        if ($searching && ($needle == $value))
        {
            return $key;
        }
    }

    return false;
}

..そしてそれらをテストします:

$array = array("one" => "foo", "two" => "bar", "three" => "baz", "four" => "woo", "five" => "foo", "six" => "bar");

var_dump(array_search_from("foo", $array, "one"));
var_dump(array_search_from("foo", $array, "two"));
var_dump(array_search_from("bar", $array, "three"));       

.. 結果:

string(3) "one"
string(4) "five"
string(3) "six"

..これはあまり役に立たないかもしれませんが、実行できます。したがって、それは行われました。

于 2013-02-26T15:08:18.297 に答える