Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果相似大小数组中的对应元素是数字(无迭代),如何获取数组中空元素的键?_Php_Arrays_Key_Compare - Fatal编程技术网

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;
    }