Comunidad de diseño web y desarrollo en internet online

diferencia entre arrays

Citar            
MensajeEscrito el 10 Nov 2008 04:00 pm
tengo dos arrays

Código :

$uno=array("a","b","c");
$dos=array("a","b");


y necesito obtener un array que sólo contenga las diferencias, por ejemplo:

Código :

$tres=array("c");


probé con

Código :

 array_diff($uno, $dos);


y no logro conseguirlo.
alguno me da una mano?
desde ya, muchas gracias
Marcos

Por exegeses

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Nov 2008 04:52 pm

Código :

$array1 = array("a","b","c");
$array2 = array("a","b");
$result = array_diff($array1, $array2);

print_r($result);

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 10 Nov 2008 05:15 pm
muchas gracias por tu respuesta!

probé eso, pero no me resulta.
tengo esto:

############################################
$id_con=mysql_connect($server,$usuario,$clave);
mysql_select_db($base,$id_con);
$consulta="SELECT nombre from lista";
$resultado=mysql_query($consulta);

Código :

while($fila=mysql_fetch_array($resultado)){
        
        $arch_base[] = $fila[nombre];// almacenamos videos de la base en un array
        echo($fila[nombre]."<br />");

}
############################################
$dir = opendir($path);
$archivos=array(); //para almacenar los archivos de un directorio
while($file = readdir($dir)){
    $archivos[] = $file; 
}
############################################
// para ver los archivos que NO están en la base
$archivos_n=array_diff($archivos, $arch_base);   

print_r($archivos_n);


y no logro verlos.
qué me falta?

desde ya, muchas gracias

Por exegeses

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Nov 2008 05:33 pm
Haber muestrame aqui el resultado de esto:


Código :

print_r($archivos);
print_r($arch_base);
print_r($archivos_n);

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 10 Nov 2008 05:36 pm
paso todo el código

Código :

<?php

$path="videos";
$arch_base=array();

############################################
$id_con=mysql_connect($server,$usuario_db,$clave_db);
mysql_select_db("listavideos",$id_con);
$consulta="SELECT nombre from lista";
$resultado=mysql_query($consulta);
while($fila=mysql_fetch_array($resultado)){
        
        $arch_base[] = $fila[nombre];// almacenamos videos de la base en un array
        echo($fila[nombre]."<br />");

}

echo("<hr />");
print_r($arch_base); // chequeo
echo("<hr />");
############################################
############################################
echo("<br /><br /> <hr /> Listado de archivos en PHP <hr />");
$dir = opendir($path);
$archivos=array();
while($file = readdir($dir)){
    $archivos[] = $file;
}
    
print_r($archivos);

echo("<br /><hr />veamos los nuevos <hr />");

$archivos_n=array_diff($archivos, $arch_base);
//print_r(array_values($archivos_n));
//print_r($archivos_n);

for($i=0;$i<count($archivos_n);$i++){

    if($archivos_n[$i] != "." || $archivos_n[$i] != ".."){
    
        echo("<strong>$archivos_n[$i]</strong><br />");
    }
    
}

?>


lo que quiero hacer es ver TODOS los archivos en un directorio que NO estén ya ingresados en la base de datos.
lamentablemente no me los muestra todos

ya me tiene a maltraer.
espero esto sirva para aclarar

muchas gracias

Por exegeses

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Nov 2008 06:06 pm
No quiero ver código, necesito ver que te arroja en el navegador esto:

Código :

print_r($archivos);
print_r($arch_base);
print_r($archivos_n);


Si no te arroja la diferencia en archivos_n es porque en BD guardas los archivos con otro nombre, o algo que como de lo muestra en dir, por eso necesito ver eso.

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 10 Nov 2008 06:13 pm

Dano escribió:

No quiero ver código, necesito ver que te arroja en el navegador esto:

Código :

print_r($archivos);
print_r($arch_base);
print_r($archivos_n);


Si no te arroja la diferencia en archivos_n es porque en BD guardas los archivos con otro nombre, o algo que como de lo muestra en dir, por eso necesito ver eso.


muchas gracias Dano por tu respuesta:

acá está lo que me tiran los print_r

Código :

Array ( [0] => . [1] => .. [2] => cuatro.mov [3] => dos.mov [4] => tres.mov [5] => uno.mov )
Array ( [0] => tres.mov [1] => cuatro.mov )
Array ( [0] => . [1] => .. [3] => dos.mov [5] => uno.mov ) 


cual podrá ser el problema?

Por exegeses

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Nov 2008 06:30 pm

exegeses escribió:

Dano escribió:

No quiero ver código, necesito ver que te arroja en el navegador esto:

Código :

print_r($archivos);
print_r($arch_base);
print_r($archivos_n);


Si no te arroja la diferencia en archivos_n es porque en BD guardas los archivos con otro nombre, o algo que como de lo muestra en dir, por eso necesito ver eso.


muchas gracias Dano por tu respuesta:

acá está lo que me tiran los print_r

Código :

Array ( [0] => . [1] => .. [2] => cuatro.mov [3] => dos.mov [4] => tres.mov [5] => uno.mov )
Array ( [0] => tres.mov [1] => cuatro.mov )
Array ( [0] => . [1] => .. [3] => dos.mov [5] => uno.mov ) 


cual podrá ser el problema?

Yo veo que todo funciona correcto. En tu base de datos solo tienes a tres.mov y cuatro.mov. Te falta agregar dos.mov y uno.mov. Y el array contiene precisamente eso:
Array ( [0] => . [1] => .. [3] => dos.mov [5] => uno.mov ) ; <--- mira

Esos son los que te falta agregar, viendo las salidas todo esta correcto. ¿Qué es lo que no te funciona?

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos



Ultima edición por Dano el 10 Nov 2008 06:51 pm, editado 1 vez

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 10 Nov 2008 06:39 pm
Dano, eso es lo que no entiendo.

si hago esto:

Código :

<?php
echo("<span style='color:#0000ff'>");
for($i=0; $i<count($archivos_n); $i++){

    if($archivos_n[$i] != "." || $archivos_n[$i] != ".."){
    
        echo("<strong>$archivos_n[$i]</strong><br />");
    }
    
}
echo("</span><br />");
?>


lo que veo en pantalla es esto:

Código :

..

dos.mov


no le encuentro el sentido. ¿que podrá ser?

Por exegeses

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Nov 2008 06:53 pm
El operador que usas debe ser and y no or y también comprueba una diferencia estricta.
Prueba con este if en vez del que tienes:

Código :

    if($archivos_n[$i] !== "." && $archivos_n[$i] !== ".."){

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 10 Nov 2008 07:09 pm
ya está, finalmente lo pude resolver.

no lo habría hecho sin su ayuda.

el probelma era este:

Código :

Array ( [0] => . [1] => .. [3] => dos.mov [5] => uno.mov ) 


es un array NO consecutivo.

entonces con un simple foreach, sacando los valores "." y ".."
ya quedó.

la verdad, agradezco mucho su ayuda y todo lo que aportan a los que menos sabemos.
espero poder retribuir del mismo modo cuando se me presente la oportunidad.

muchas gracias nuevamente
Marcos

Por exegeses

3 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.