给定以下任一数组(它们是从JSON派生的,并且可以使用json_decode()
创建),如何找到给定x
和{的父数组的第一个键{1}}值没有手动迭代数组?例如,给定x = 1和y = 3,返回1.最后,我希望删除它,但找到它是第一步。
y
Array
(
[0] => Array
(
[x] => 1
[y] => 2
)
[1] => Array
(
[x] => 1
[y] => 3
)
[2] => Array
(
[x] => 2
[y] => 2
)
[3] => Array
(
[x] => 4
[y] => 2
)
[4] => Array
(
[x] => 1
[y] => 4
)
)
答案 0 :(得分:3)
array_search
将根据文档完成相同的操作:
在数组中搜索给定值,并在成功时返回第一个相应的键
$data = [["x" => 1, "y" => 2],
["x" => 1, "y" => 3],
["x" => 2, "y" => 2],
["x" => 4, "y" => 2]];
$result = array_search(["x" => 2, "y" => 2], $data);
echo $result;
输出:
2
答案 1 :(得分:1)
遗憾的是,没有迭代数组就无法在数组中搜索值。时间复杂度仍为O(n)
,因为您在数组中查找值,而在PHP数组中查找键的成本始终为O(1)
,因为它是哈希查找。您在PHP中用于检查数组值的任何函数仍将具有O(n)
的成本。
function getKey($x, $y, $arr) {
foreach($arr as $key => $value) {
if ($x === $value["x"] && $y === $value["y"]) {
return $key;
}
}
}
你也可以更普遍地写这个函数......
function getKey($needle, $haystack) {
foreach($haystack $key => $value) {
if ($needle === $value) {
return $key;
}
}
}
与array_search($needle, $haystack, true)
的作用相同。但是,区别在于PHP中的["y" => 1, "x" => 3] !== ["x" => 3, "y" => 1]
。因此,更具体的功能将始终按预期工作。更一般的功能有关于价值秩序的边缘情况。
当然,重要的是要注意,您可能总是关心strict comparison,在这种情况下,array_search
可以正常工作以满足您的需求。