是否有可能在php中的某个特定索引之后找到数组中的元素,任何帮助将不胜感激!
答案 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"
..这可能不是那么有用,但可以做到。因此,它已经完成。