PHP - ¿Porque in_array obvia que si hay coincidencias en el array?

 
Vista:
Imágen de perfil de Carlos

¿Porque in_array obvia que si hay coincidencias en el array?

Publicado por Carlos (3 intervenciones) el 10/11/2022 18:54:46
Hola, tengo un código php que se encarga de tomar el contenido de un archivo json, comparar uno de sus valores (email) con un dato que el usuario introduce en el formulario, pero a pesar se que si existe ese dato in_array lo ignora y ejecuta el fragmento de código que añade ese mismo dato al array (si no existiera) y pasa a convertirse a json (Cuando no trabajo con file_get_contents si funciona, pero si extraigo y sobreescribo el archivo json entonces me da ese error).

Código php:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// datos de prueba
$jsonfile = file_get_contents('data.json');
$jsonarray = json_decode($jsonfile, true);
foreach ($jsonarray as $value){
    if(in_array($_post['email'],$value)){
    echo "el correo ya está registrado, inicie sesión";
}
else
{
  echo "el usuario no existe en la base de datos, registrando";
  $addarray=array(
    'username' => $_post['username'],
    'email' => $_post['email'],
    'id' => $_post['id'],
    'password' => $_post['password'],
 );
 $jsonarray[]=$addarray;
 $jsonout = json_encode($jsonarray);
 file_put_contents('data.json', $jsonout);
};
break;
};
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ivan

¿Porque in_array obvia que si hay coincidencias en el array?

Publicado por Ivan (118 intervenciones) el 21/11/2022 11:59:16
Hola,

primero de todo habría que ver que el valor devuelto por file_get_contents sea correcto.

Después tener en cuenta que cuando haces $jsonarray = json_decode($jsonfile, true); tienes el array $jsonarray

Y cuando haces foreach ($jsonarray as $value){ tienes en $value un campo del array no un array y si le preguntas in_array() no funciona.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Carlos

¿Porque in_array obvia que si hay coincidencias en el array?

Publicado por Carlos (3 intervenciones) el 21/11/2022 13:58:32
Gracias, el valor devuelto por file_get_contents es correcto, supongo que el fallo sea por lo que dices del valor y no el array. Soy nuevo en php, si me pudieras ayudar con el fragmento código que tengo que usar para arreglarlo me sería de gran ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Porque in_array obvia que si hay coincidencias en el array?

Publicado por Yamil Bracho (22 intervenciones) el 21/11/2022 14:18:26
Lo mas facil es que muestres el valor de las variables que estas checando asi que agrega

echo $_post['email'];
foreach ($jsonarray as $value){
echo $value;
if(in_array($_post['email'],$value)){
echo "el correo ya está registrado, inicie sesión";
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Carlos

¿Porque in_array obvia que si hay coincidencias en el array?

Publicado por Carlos (3 intervenciones) el 21/11/2022 18:23:31
Gracias, esta mañana leyendo la documentación de PHP me encontré con un usuario que tuvo la misma necesidad y sin tener que usar foreach, esto acorta el tiempo de procesamiento y respuesta por parte del servidor, la solución es así:
1
2
3
4
5
6
7
$value = "carlos@gmail.com";
 
if($found_key = array_search($value, array_column($jsonarray, 'email'))){
   echo "existe "."en la posición del index ".$found_key;
}else{
   echo "no existe";
}

Incluso muestra la posición del valor encontrado en el index, en caso contrario da el mensaje de que no existe.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar