Как перебрать массивы разной длины и запустить функцию внутри цикла - PullRequest
0 голосов
/ 15 февраля 2012

Я пытаюсь создать функцию, которая будет перебирать массив различной длины.Во время цикла запускается функция, чтобы увидеть, соответствует ли непосредственно предыдущий элемент (элемент с текущим ключом минус 1) тому, что находится в массиве.Вот два примера массивов:

$terms1 = array(
    0 => 'MEL',
    1 => 'Appliances',
    2 => 'Clothes Dryers',
    3 => 'Clothes dryers - electric'
);

$terms2 = array(
    0 => 'Clothes Dryers',
    1 => 'Clothes dryers - electric'
);

А вот функция, которая должна быть запущена в цикле ... эта функция вернет значение, а затем я сравню это с тем, что находится в массиве внепосредственно перед местоположением (текущий ключ минус 1).Это извлекается из базы данных.

getParent($terms1[3]); //Would output the value I want to compare to $terms1[2]

Я пробовал что-то вроде этого:

$fail = null;
foreach(array_reverse($terms1, true) as $key => $value){
    if($key > 0){
        $priorkey = $key - 1;
        if(getParent($terms1[$key]) != $terms1[$priorkey]){
            $fail = true;
        }
    }
}
return $fail;

Я думаю, что мне нужна рекурсивная функция ... любая помощь или толчок в правильном направлениибудет оценена.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2012

Я не понимаю, почему ваш код не работает, но если вы добавите break; после $fail = true;, он будет работать быстрее и даст тот же результат.Нет необходимости проверять остаток после первого сбоя.

0 голосов
/ 15 февраля 2012
$prev = null;
foreach ($terms1 as $v) {
    if ($prev == getParent($v)) {
        $fail = true;
        break;
    }

    $prev = $v;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...