-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 回答