我有两个相同大小的数组$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_keys()
和array_udiff()
和其他PHP数组函数来做到这一点,但我只是不能。
这将在线性O(n)时间内执行。
$keys = array();
foreach ($array1 as $i => $v1) {
if (is_numeric($v1) && !$array2[$i])
$keys[] = $i;
}
is_numeric()接受的值比大多数人认为的"数字"多一点,但如果这是一个问题,只需替换为另一个函数。
我也假设你的"空"的定义是一个值,php将转换为布尔值false。同样,根据需要进行调整
我会这样做:
<?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 );
}