Autor Zpráva
bvdfhghd vx
Profil *
Zdravím,
už hodinu riešim nasledovný problém a stále som k ničomu nedošiel :-(. Potreboval by som vymazať z poľa array1 všetky položky, ktoré sa nachádzajú v poli array2 (nie opačne). array_diff čiastočne funguje, ale mám s ním dve komplikácie:
1.) array_diff robí rozdiel dvoch polí, ja by som potreboval odčítať jedno pole od druhého
2.) array_diff nedokáže pracovať s viacúrovňovým polom, ja by som však potrebovalo odčítať práve také polia

Vedel by mi niekto poradiť, ako na to?

Díky.
Aesir
Profil
bvdfhghd vx:

Možná by šlo takhle nějak:

<?php
function arraySubstractArray($minuend, $subtrahend) {
        $difference = array_diff($minuend, $subtrahend);
        $difference = array_intersect($difference, $minuend);
        return $difference;
}
?>
bvdfhghd vx
Profil *
Takto mi to funguje:
function array_substract($minuend, $subtrahend) {
$difference = array_diff($minuend, $subtrahend);
$difference = array_intersect_key($difference, $subtrahend);
return $difference;
}

ale funguje to iba pre jednoduché pole. Ak má pole viac úrovni (rekurzívne), tak to rekurziu ignoruje.
bvdfhghd vx
Profil *
Nakoniec som to vyriešil:

function array_diff_recursive($aArray1, $aArray2) {
    $aReturn = array();
   
    foreach ($aArray1 as $mKey => $mValue) {
        if (array_key_exists($mKey, $aArray2)) {
            if (is_array($mValue)) {
                $aRecursiveDiff = arrayRecursiveDiff($mValue, $aArray2[$mKey]);
                if (count($aRecursiveDiff)) { $aReturn[$mKey] = $aRecursiveDiff; }
            } else {
                if ($mValue != $aArray2[$mKey]) {
                    $aReturn[$mKey] = $mValue;
                }
            }
        } else {
            $aReturn[$mKey] = $mValue;
        }
    }
   
    return $aReturn;
}


function array_substract($minuend, $subtrahend) {
        $difference = array_diff_recursive($minuend, $subtrahend);
        $difference = array_intersect_key($difference, $subtrahend);
        return $difference;
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: