Originariamente inviato da Fichico
Avrei la necessità, dati 3 array, di recuperare determinati valori non ripetuti (in pratica devo ricavare eventuali dipendenze di ID da un db) ed inserirli in un array di risultati
All'indice C posso avere dei doppioni
Per fare un esempio vi posto il codice dove, ahimè, il risultato non è quello che mi aspetto ... non so più come fare
Dati i 3 array:
- se quello con chiave B non è un array, metto in tmp quello con chiave A
- altrimenti faccio differenza tra A e B e
-> se la diff non è array vuoto, tmp= merge A+diff
-> altrimenti tmp= merge A+diff
dall'esempio del codice il risultato che mi aspetto, senza doppioni, è
codice:
ris = array(1 => array(1,2,8), 2 => array(1,2), 3 => array(1,2), 4 => array(2,8))
qualcuno sa dirmi dove sbaglio? a me sembra tutto ok
Codice PHP:
// Mancano le dichiarazioni iniziali
$arr1 = array();
$arr2 = array();
$arr3 = array();
$arr4 = array();
// solitamente si indica padre-figlio ..... perche' al femminile ?
$arr1['A'] = array(2,5,7,8,9,10); // tutti gli id (madri e figlie)
$arr1['B'] = array(5,7,9,10); // id con madre<>0 (figlie)
$arr1['C'] = array(2,2,1,1); // madre dei B (madri delle figlie B)
$arr2['A'] = array(7,9);
$arr3['B'] = array(7,9); // Perche' array 3 ?????
$arr2['C'] = array(2,1);
$arr3['A'] = array(2,7,9);
$arr3['B'] = array(7,9); // hai ridefinito arr3[b] come sopra ripetizione o svista sopra ?
$arr3['C'] = array(2,1);
$arr4['A'] = array(2,8);
// Qui mi fermo ....
// ma ti consiglio di usare opportunamente le funzioni array_diff etc... facendo cmq
// molt attenzione a come stai definendo il tutto ... che alla fine hai array di array
// sono quasi delle matrici queste cose
for($x=1 ; $x<=4 ; $x++){
unset($tmpDiff);
unset($tmpSum);
if(!is_array(${'arr'.$x}['B']))
$tmpSum = ${'arr'.$x}['A'];
else{
array_unique(${'arr'.$x}['C']);
$tmpDiff = array_diff(${'arr'.$x}['A'], ${'arr'.$x}['B']);
$tmpSum = array_merge(${'arr'.$x}['C'], empty($tmpDiff) ? ${'arr'.$x}['A'] : $tmpDiff);
}
array_unique($tmpSum);
sort($tmpSum);
$res[$x] = $tmpSum;
}
print "<pre>";
print_r($res);
print "</pre>";
grazie mille!!
edit: scusate ho corretto il codice che avevo copiato una porzione sbagliata