Problema con array

Vera

Utente Attivo
3 Giu 2014
76
1
8
Buongiorno

ho due array;

PHP:
$dati01 = Array();
$dati02 = Array();
$b = 0;
$c = 0;

carico il primo array come di seguito e verifico se il dato caricato nel primo array sia presente nel secondo array con il codice in_array:

PHP:
while($rows =......
{
$dati01[$b]['STRINGA'] = trim($rows['DT0001']).trim($rows['ORINIZ']).trim($rows['ORFINE']);

if(in_array($dati01[$b]['STRINGA'], $dati02))
         {
             echo 'trovato il dato';
         }
         else
         {
             $dati02[$c]['STRINGA'] = $dati01[$b]['STRINGA'];    
             $c++;  
         }
$b++;
}

nel primo array ho diversi record caricati della serie (i dati sotto riportati non sono altro che la concatenazione che ottengo nel ciclo while del primo array):

2015101909001000
2015102010001100
2015102113001400
2015102113001400
2015102113001400

il problema sta nel fatto che il secondo array me lo carica con tutti e 5 i record di sopra, non tenendo conto che a partire dal terzo record (2015102113001400) i successivi sono identici. Per cui vorrei nel secondo array solamente questi record caricati:

2015101909001000
2015102010001100
2015102113001400

Dov'é l'errore???
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
se ti è possibile inverti gli indici, se provi questo piccolo script vedi che fa quello che vorresti
PHP:
<?php
//tu parti con un array tipo
$dati02['STRINGA'][0] = '2015102113001400';
$dati02['STRINGA'][1] = '2015102113001400';//giusto?
//nel while crei un'altro array tipo
$dati01['STRINGA'][0] = '2015101909001000';
$dati01['STRINGA'][1] = '2015102010001100';
$dati01['STRINGA'][2] = '2015102113001400';
$dati01['STRINGA'][3] = '2015102113001400';
$dati01['STRINGA'][4] = '2015102113001400';//giusto?
/*e vorresti che $dati02['STRINGA'] diventasse
$dati02[0]['STRINGA'] = '2015101909001000';
$dati02[1]['STRINGA'] = '2015102010001100';
$dati02[2]['STRINGA'] = '2015102113001400';//giusto?
*/
$b = 0;
$c = 0;
//simulo il ciclo while con un for
echo "<pre>";
var_dump($dati02);
var_dump($dati01);
for($k=0; $k<=4; $k++){
	if(in_array($dati01['STRINGA'][$k], $dati02['STRINGA'])){
		echo 'trovato il dato<br>';
    }else{
		$dati02['STRINGA'][$c] = $dati01['STRINGA'][$k];    
		$c++;  
	}
}  
var_dump($dati02);
echo "</pre>";
?>
 

Vera

Utente Attivo
3 Giu 2014
76
1
8
Ciao,
tieni presente che i dati (record che ho trasmesso nel mio post) possono essere di più.
In generale il secondo array deve essere scritto solamente se la chiave presente nel primo array non é presente nel secondo array.
Un altro esempio pratico di record presenti nel primo array:

2015100509001000
2015100509001000
2015100509001000
2015100611001200
2015100612001300
2015100809001000
2015100809001000
2015101014001500
2015101014001500

per un totale di 9 record

per cui nel secondo array dovrei trovare scritto solamente:
2015100509001000
2015100611001200
2015100612001300
2015100809001000
2015101014001500

per un totale di 5 record

Vera
 

Vera

Utente Attivo
3 Giu 2014
76
1
8
Perdonami se insisto.
perché il codice cosi' prodotto di seguito non risponde alle mie esigenze.? Cioé il secondo array mi viene caricato di chiavi duplicate....


PHP:
for ($k=0; $k<= count($dati01); $k++)
     {
         if(in_array($dati01[$k]['STRINGA'], $dati02['STRINGA']))
         {
             echo 'trovato il dato<br>'; 
         }
         else
         {
            $dati02[$c]['STRINGA'] = $dati01[$k]['STRINGA'];    
            $c++;
         }    
     }

devo poter filtrare i dati del primo array ($dati01) nel secondo array ($dati02).

Sto perdendo la testa ...........................
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
quello che continuo a non capire a che ti serva guel ['STRINGA'], soprattutto se è un valore statico e comunque renderebbe il tutto più facile se fosse invertito ['STRINGA'][numero], comunque ribadisco se è statico serve solo a complicare le cose.
devo andare via per un po' poi ti posto un'altro esempio
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
sperando di aver capito, dai un occhio (eventualmente provalo per vedede se fa il caso tuo), in questo modo ottieni un nuovo array ($dati02) che contiene i dati di $dati01 che non erano già scritti nell'originale $dati02
PHP:
<?php
function verifica($a01, $a02){
	foreach($a01 as $v1){$semplice1[]=$v1['stringa'];}
	foreach($a02 as $v2){$semplice2[]=$v2['stringa'];}
	$semplice1=array_unique($semplice1);//se sei sicura che NON ci siano dati duplicati non serve
	$semplice2=array_diff($semplice1,$semplice2);//togli i valori in comune
	$k=0;
	foreach($semplice2 as $valore){
		$semplice3[$k]['stringa']=$valore;//ritrasformi nella forma [numero]['stringa']
		$k++;
	}
	return $semplice3;
}
echo "<pre>";//questo e i var_dump poi li togli
/* qui avrai il tuo while($rows =.. e la costruzione della stringa
$dati01[]['STRINGA'] = trim($rows['DT0001']).trim($rows['ORINIZ']).trim($rows['ORFINE']);
il $b NON serve ci pensa php a incrementare
e otterrai un array del genere (metto delle lettere per facilitare la lettura)*/
$dati01[0]=array("stringa"=>'aaaa');
$dati01[1]=array("stringa"=>'bbbb');
$dati01[2]=array("stringa"=>'cccc');
$dati01[3]=array("stringa"=>'uuuu');
$dati01[4]=array("stringa"=>'dddd');
$dati01[5]=array("stringa"=>'cccc');
$dati01[6]=array("stringa"=>'dddd');
$dati01[7]=array("stringa"=>'eeee');
$dati01[8]=array("stringa"=>'ffff');
$dati01[9]=array("stringa"=>'dddd');
var_dump($dati01);
//ipotizzioamo che questo sia il secondo array
$dati02[0]=array('stringa'=>'aaaa');
$dati02[1]=array('stringa'=>'ffff');
$dati02[2]=array('stringa'=>'hhhh');// 
var_dump($dati02);
//qui la fine del vhile
$dati02=verifica($dati01,$dati02);//e ottieni un array 02 con i dati di 01 che NON ci sono in 02 originale
var_dump($dati02);
echo "</pre>";
?>
però pensaci ti sertve effettivamente l'arry scritto in quella maniera?
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
stai lavorando con un'array "multidimensionale" credo ci sia qualche problema ad usare la funzione "in_array"

prova così,
PHP:
<?php
$c=0;
$dati02[0]['STRINGA']='';

$dati01[]['STRINGA'] = '2015111111111111'; 
$dati01[]['STRINGA'] = '2015222222222222'; 
$dati01[]['STRINGA'] = '2015222222222222'; 
$dati01[]['STRINGA'] = '2015000000000000'; 
$dati01[]['STRINGA'] = '2015333333333333'; 
$dati01[]['STRINGA'] = '2015222222222222'; 
$dati01[]['STRINGA'] = '2015333333333333'; 
$dati01[]['STRINGA'] = '2015111111111111'; 

for($b=0; $b<count($dati01); $b++)
{
  $OK = false; 
  for($c=0; $c<=count($dati02); $c++)
  {
    if($dati02[$c]['STRINGA'] == $dati01[$b]['STRINGA'])
    {
      echo ' trovato il dato '.$dati01[$b]['STRINGA'].'<br />';
      $OK = true; 
    }
  } 
  if(!$OK)
  { 
    echo ' non trovato il dato '.$dati01[$b]['STRINGA'].'<br />'; 
    $dati02[$c]['STRINGA'] = $dati01[$b]['STRINGA'];
    $c++;  
  } 
}
echo 'DONE!';
?>
risultato
non trovato il dato 2015111111111111
non trovato il dato 2015222222222222
trovato il dato 2015222222222222
non trovato il dato 2015000000000000
non trovato il dato 2015333333333333
trovato il dato 2015222222222222
trovato il dato 2015333333333333
trovato il dato 2015111111111111
DONE!
 

Vera

Utente Attivo
3 Giu 2014
76
1
8
A dire il vero avevo anche io qualche dubbio sulla funzione in_array poiché trattasi di un array multidimensionale. La tua soluzione soddisfa per cui grazie 1000. Grazie anche anche a "borgo Italia".

Vera
 
Discussioni simili
Autore Titolo Forum Risposte Data
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
T PROBLEMA CON ARRAY PHP 8
F [PHP] Problema con array multidimensionale PHP 4
alessandra86 [PHP] Popolamento database con form ricorsivi - problema array (foreach ) PHP 5
R [PHP] Problema stampa array bidimensionali con formula $html.=<<<myHtml... PHP 2
S problema con gli array in javascript Javascript 12
C Problema con creazione array PHP 7
neo996sps PHP/MySQL - Problema con generazione array PHP 14
L problema array con le sessioni PHP 1
F Problema formattazione data e creazione array con nuove date Javascript 2
F problema Json con Array jQuery 1
S Problema con inserire la select in un array PHP 2
E Problema con array multipli Javascript 1
S Problema con 2 funzioni:array,select dinamica Javascript 21
P Problema con array e foreach PHP 15
L Problema con un array e il $$ PHP 2
F Problema urgente con checkbox, array e explode PHP 10
S Problema con fwrite e array PHP 3
F Problema con array multidimensionali Flash 0
N Problema con array multidimensionali PHP 0
minatore problema con gli array PHP 5
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
N Problema con position absolute e overflow HTML e CSS 4
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
K [PHP] Problema con variabili concatenate. PHP 1
O problema con query PHP 4
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
M Problema con Try Catch PHP 0
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
R problema con else PHP 0
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
G Problema con Get page PHP 4
P Problema con require once PHP 6

Discussioni simili