是否可以在 php 中的某个特定索引之后在数组中找到一个元素,任何帮助将不胜感激!
问问题
62 次
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 回答