Autor | Zpráva | ||
---|---|---|---|
bvdfhghd vx Profil * |
#1 · Zasláno: 28. 8. 2009, 19:40:26
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 |
#2 · Zasláno: 28. 8. 2009, 20:02:13 · Upravil/a: Aesir
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 * |
#3 · Zasláno: 28. 8. 2009, 22:02:37
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; } |
||
Časová prodleva: 15 let
|
0