如果大小相似的数组中对应的元素是数字,则如何获取数组中空元素的键(无需迭代)


How to get the keys of empty elements in an array if the corresponding element in a similar-sized array is a number (without iteration)?

我有两个相同大小的数组$array1$array2,它们都具有通常的连续数字键。$array1为数字,$array2为文本。我不能改变这个结构来适应多维数组或其他。

在不遍历整个数组的情况下,我如何获得$array2中

的元素的键i
  1. $array1[i]为数字;但
  2. $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 );
}