Php 如果相似大小数组中的对应元素是数字(无迭代),如何获取数组中空元素的键?
我有两个大小相同的数组Php 如果相似大小数组中的对应元素是数字(无迭代),如何获取数组中空元素的键?,php,arrays,key,compare,Php,Arrays,Key,Compare,我有两个大小相同的数组$array1和$array2,它们都带有常用的连续数字键$array1包含数字,$array2包含文本。我无法更改此结构以适应多维数组或其他内容 在不遍历整个数组的情况下,如何获取$array2中元素的键I $array1[i]是一个数字;但是 $array2[i]是否为空 例如: // numbers $array1 = array(NAN, NAN, 1, 0, 3.5, NAN, 2, 4, 0.5); // text $array2 = array(FALSE,
$array1
和$array2
,它们都带有常用的连续数字键<代码>$array1包含数字,$array2
包含文本。我无法更改此结构以适应多维数组或其他内容
在不遍历整个数组的情况下,如何获取$array2中元素的键
I
$array1[i]
是一个数字;但是$array2[i]
是否为空// numbers
$array1 = array(NAN, NAN, 1, 0, 3.5, NAN, 2, 4, 0.5);
// text
$array2 = array(FALSE, FALSE, "abc", "abc", FALSE, FALSE, "text", "abc", FALSE);
预期结果:
// keys of $array2 where $array1[i] is a number and
// $array2[i] is empty/null/false
Array
(
[0] => 4
[1] => 8
)
我一直在尝试实现array\u keys()
和array\u udiff()
以及其他PHP数组函数来实现这一点,但我就是做不到
帮帮忙,伙计们,谢谢 我会这样做:
<?php
$keys = array();
foreach($array1 as $iterator){
$key = array_search($iterator,$array1);
$elem_in_array1 = $array1[$key]; //= $iterator
$elem_in_array2 = $array2[$key];
if(is_numeric($elem_in_array1) && emtpy($elem_in_array2)){
$keys[] = $key;
}
}
?>
这将获取$arr1中与$value匹配的第一个值,以及$arr2中与$arr1中找到的值索引对应的值
<?php
function array_magic ($value, $arr1, $arr2) {
$index = array_search($value, $arr1);
if ($index === false) {
return false;
}
if(!isset($arr2[$index])) {
$value2 = null;
} else {
$value2 = $arr2[$index];
}
return array( $value, $value2 );
}
这将在线性O(n)时间内执行
()接受比大多数人认为的“数字”多一点,但如果这是一个问题,用另一个函数代替。< /P>
我还假设您对“empty”的定义是php应该使用的值。再次,根据需要进行调整。请发布更多数据。如果您需要检查$array2的值是否存在[i]您可以使用isset
指令,谢谢,@ThinkingMonkey。问题已更新。现在有什么想法吗?谢谢,@Yaniro,我会记住这一点的。“不用看整个阵列”。不可能,除非您转换到另一个数据结构。要转换到另一个数据结构,您必须“遍历整个数组”。谢谢@Andreu,非常抱歉,我应该包括我试图避免遍历整个数组。但如果没有别的办法,我肯定会让它转一转。有什么想法吗?谢谢manhi@Jonathan,谢谢,很抱歉我刚刚更新了这个问题:我试图避免浏览整个阵列。有可能吗?我注意到了你的更新,并依次更新了我的回复。array_search仍然会在数组中迭代,但它在C中是这样做的,所以它比foreach.lol要快,它即将用我类似但不太优雅的答案进行更新。太棒了,伙计,谢谢!顺便说一句,是数字()
和false
是正确的。
$keys = array();
foreach ($array1 as $i => $v1) {
if (is_numeric($v1) && !$array2[$i])
$keys[] = $i;
}