Как получить ключи пустых элементов в массиве, если соответствующий элемент в массиве аналогичного размера является числом (без итерации)? - PullRequest
1 голос
/ 28 декабря 2011

У меня есть два массива одинакового размера $array1 и $array2, оба с обычными последовательными цифровыми клавишами. $array1 содержит числа, $array2 содержит текст. Я не могу изменить эту структуру, чтобы приспособить многомерные массивы или что.

Не пройдя весь массив, как мне получить ключи i элементов в $ array2, где

  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, чтобы сделать это, но я просто не могу.

Помогите, ребята, спасибо!

Ответы [ 3 ]

2 голосов
/ 28 декабря 2011

Это будет выполняться за линейное время O (n).

$keys = array();
foreach ($array1 as $i => $v1) {
    if (is_numeric($v1) && !$array2[$i])
        $keys[] = $i;
}

is_numeric () принимает немного больше, чем то, что большинство людей считает «числами», но если это проблема, просто замените на другую функцию.

Я также предположил, что ваше определение "empty" - это значение, которое php преобразует в логическое значение false . Снова отрегулируйте по необходимости.

0 голосов
/ 28 декабря 2011

Будет получено первое значение в $ 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 );
}
0 голосов
/ 28 декабря 2011

я бы сделал что-то вроде этого:

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