通过手动索引从数组中搜索元素

时间:2013-02-26 13:56:50

标签: php arrays

是否有可能在php中的某个特定索引之后找到数组中的元素,任何帮助将不胜感激!

1 个答案:

答案 0 :(得分: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"

..这可能不是那么有用,但可以做到。因此,它已经完成。