Foros del Web » Programando para Internet » PHP »

Comprara dos arrays y extraer las coincidencias

Estas en el tema de Comprara dos arrays y extraer las coincidencias en el foro de PHP en Foros del Web. Tengo un carrito que se guardan los registros en un objeto dentro de una sesión. Me interesa meter un array del id de las compras ...
  #1 (permalink)  
Antiguo 30/06/2011, 10:04
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 13 años, 9 meses
Puntos: 2
Comprara dos arrays y extraer las coincidencias

Tengo un carrito que se guardan los registros en un objeto dentro de una sesión.
Me interesa meter un array del id de las compras como un string (ya que puede ser una o varias) dentro de un campo llamado datos.

<? foreach ($_SESSION["ocarrito"]->array_id_prod as $key => $id)
{
echo "$id,";}?>
1,23,45,56, se guarda dentro de un campo como un string

Tengo los registros de los productos identificados con su id en otra tabla con su descripción quiero hacer una conulta comparando los id del string datos con los id de los productos.

lo tengo así

<? $fo = array();?>
<?
do {?>
<? $fo[]=$row_prod['id'];?>
<? } while ($row_prod=mysql_fetch_assoc($prod));?>

<? $fu = array();?>
<?
do {?>
<? $fu[]=substr($row_dat['datos'], 0,-1);?> => esto es para quitar la última coma
<? } while ($row_dat=mysql_fetch_assoc($dat));?>
<?php

Para meterles las comas dentro
$po=implode($fo,",");
$pu=implode($fu,",");

Esto sale:

2222,2231
2222,230,500,345,78,2,56,78,290
Coincide el 2222

<?

$A =array($po);
$B =array($pu);
$C = array_intersect($A,$B);
?>

<? foreach($C as $value)
{
echo $value;}?><br />


?>

No sale nada
pero si pongo

<?

$A =array(2222,2231);
$B =array(2222,230,500,345,78,2,56,78,290);
$C = array_intersect($A,$B);
?>

sale 2222

  #2 (permalink)  
Antiguo 30/06/2011, 10:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 14 años, 4 meses
Puntos: 2534
Respuesta: Comprara dos arrays y extraer las coincidencias

No entiendo por que haces implode() para generar una cadena separada con comas.

¡¡Si ya tienes los arrays creados en $fo y $fu!!

Solo debes usarlos directamente, no alucines "creando" un array a partir de un string con comas que así no sirve.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 30/06/2011, 10:54
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Comprara dos arrays y extraer las coincidencias

<?
$A=$fo;
$B=$fu;
$C = array_intersect ($A,$B);
?>

No sale nada
  #4 (permalink)  
Antiguo 30/06/2011, 10:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 14 años, 4 meses
Puntos: 2534
Respuesta: Comprara dos arrays y extraer las coincidencias

Cita:
Iniciado por jordi45 Ver Mensaje
<?
$A=$fo;
$B=$fu;
$C = array_intersect ($A,$B);
?>

No sale nada
Obvio no va a salir nada.

Si no imprimes nada, ¿como esperas ver algo?
Código PHP:
<? 
$A
=$fo
$B=$fu;
$C array_intersect ($A,$B);
print_r($C); // imprimir el valor de $C
?>
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 30/06/2011, 11:01
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Comprara dos arrays y extraer las coincidencias

Cita:
Iniciado por pateketrueke Ver Mensaje
Obvio no va a salir nada.

Si no imprimes nada, ¿como esperas ver algo?
Código PHP:
<? 
$A
=$fo
$B=$fu;
$C array_intersect ($A,$B);
print_r($C); // imprimir el valor de $C
?>

Que ya lo he hecho dice que $C es un array.

Si haces el foreach
($C as $value) {echo $value;} no sale nada.
  #6 (permalink)  
Antiguo 30/06/2011, 11:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 14 años, 4 meses
Puntos: 2534
Respuesta: Comprara dos arrays y extraer las coincidencias

Veamos donde metes la pata.
Código PHP:
<?
$A
=$fo;
$B=$fu;
$C array_intersect ($A,$B);

echo 
'<pre>';
var_dump($A);
var_dump($B);
var_dump($C);
echo 
'</pre>';
?>
Ejecuta el código así, ¿que te muestra?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 30/06/2011, 11:10
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Comprara dos arrays y extraer las coincidencias

array(2) {
[0]=>
string(4) "2222"
[1]=>
string(4) "2231"
}
array(2) {
[0]=>
string(19) "2222,230,500,345,78"
[1]=>
string(11) "2,56,78,290"
}
array(0) {
}
  #8 (permalink)  
Antiguo 30/06/2011, 11:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 14 años, 4 meses
Puntos: 2534
Respuesta: Comprara dos arrays y extraer las coincidencias

Ahí tienes el problema.

Tu segundo array tiene valores con comas, por lo tanto no son lo que esperas, ¿verdad?

La idea es que generes un arreglo a partir de dichas cadenas usando explode(), así ya tendrías realmente los valores dentro de un array.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 30/06/2011, 11:15
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Comprara dos arrays y extraer las coincidencias

Ya veo donde está el problema. Hay que meter cada dato del array ¿por separado? o sea crear tantos campos como registros.
¿No hay otra forma?

Espera voy a quitar las comas.
  #10 (permalink)  
Antiguo 30/06/2011, 11:39
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Comprara dos arrays y extraer las coincidencias

<?
$miarray = explode(',',$row_dat['datos']);
$fu[]=$miarray?>
<? } while ($row_dat=mysql_fetch_assoc($dat));?>

He hecho esto:

y sale

array(2) {
[0]=>
string(4) "2222"
[1]=>
string(4) "2231"
}
array(2) {
[0]=>
array(6) {
[0]=>
string(4) "2222"
[1]=>
string(3) "230"
[2]=>
string(3) "500"
[3]=>
string(3) "345"
[4]=>
string(2) "78"
[5]=>
string(2) "
"
}
[1]=>
array(4) {
[0]=>
string(3) "256"
[1]=>
string(2) "78"
[2]=>
string(3) "290"
[3]=>
string(0) ""
}
}
array(0) {
}
  #11 (permalink)  
Antiguo 30/06/2011, 11:45
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 14 años, 4 meses
Puntos: 2534
Respuesta: Comprara dos arrays y extraer las coincidencias

Lo que sucede aquí.
Código PHP:
$miarray explode(',',$row_dat['datos']);
$fu[]=$miarray
Es que agregas el array producido por explode() como un elemento nuevo de $fu, lo cual no es lo que esperas, pues te crea un array de dos dimensiones cuando solo necesitas una.

Para conseguir agregar todos los valores de $miarray a $fu debes usar array_merge()
http://php.net/array_merge
Código PHP:
$fu array_merge($fu$miarray); 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 30/06/2011, 11:57
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Comprara dos arrays y extraer las coincidencias

No entiendo porque en el resultado en fu sale el array bidimensional.
He mirado el manual sobre array_merge y no sé como implementar eso.
  #13 (permalink)  
Antiguo 30/06/2011, 12:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 14 años, 4 meses
Puntos: 2534
Respuesta: Comprara dos arrays y extraer las coincidencias

Cita:
Iniciado por jordi45 Ver Mensaje
No entiendo porque en el resultado en fu sale el array bidimensional.
Es como si hicieras esto:
Código PHP:
$fu []= array(123); 
Eso crea precisamente otra dimensión dentro de $fu, pues $miarray es un array producto de explode().

Cita:
Iniciado por jordi45 Ver Mensaje
He mirado el manual sobre array_merge y no sé como implementar eso.
Te coloque un ejemplo para que lo apliques a tu código, ¿si leíste mi mensaje anterior?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 30/06/2011, 12:17
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Comprara dos arrays y extraer las coincidencias

Ya ha funcionado, gracias.

array(2) {
[0]=>
string(4) "2222"
[1]=>
string(4) "2231"
}
array(9) {
[0]=>
string(4) "2222"
[1]=>
string(3) "230"
[2]=>
string(3) "500"
[3]=>
string(3) "345"
[4]=>
string(2) "78"
[5]=>
string(1) "
"
[6]=>
string(3) "256"
[7]=>
string(2) "78"
[8]=>
string(3) "290"
}
array(1) {
[0]=>
string(4) "2222"
}

2222
  #15 (permalink)  
Antiguo 30/06/2011, 12:22
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Comprara dos arrays y extraer las coincidencias

Tengo que hacer una consulta en mysql para sacar otros valores con el resultado de esa intersección si sale uno, no hay problemas pero si hay varios cómo se consulta en mysql un array.

SELECT id, autor FROM productos WHERE id='el resultado de lo anterior'"
  #16 (permalink)  
Antiguo 30/06/2011, 12:24
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 11 años, 6 meses
Puntos: 128
Respuesta: Comprara dos arrays y extraer las coincidencias

cómo se consulta en mysql un array. , recorre el array y consultas por cada elemento de este

Código PHP:
Ver original
  1. //ciclo
  2. //consulta where campo = campo['valorciclo']
  3. //resultados

Saludos
__________________
Si no vivimos como pensamos, pronto empezaremos a pensar como vivimos.
Más vale un Gracias sincero, que un número que aumente "popularidad" ¬¬°

Universidad de chile, campeón
  #17 (permalink)  
Antiguo 30/06/2011, 12:27
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Comprara dos arrays y extraer las coincidencias

Probaré más tarde. Gracias.

Etiquetas: arrays, coincidencias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:30.