Intentando ver si un valor de una matriz existe en otra matriz usando PHP
Tengo estos dos arrays de la siguiente manera –
$props = json_decode('[{"proposal":"proposal 1", "owner":"tom", "lock_time":1639440607},{"proposal":"proposal 2", "owner":"bob", "lock_time":1639455554}]', true);
$votes = json_decode('[{"vote":"approve", "vote-owner":"tom", "prop-id":1639440607},{"vote":"reject", "vote-owner":"bob", "prop-id":1639455554},{"vote":"reject", "vote-owner":"tom", "prop-id":1639440607}]', true);
Cuando recorro los dos arrays, cuento los votos para cada propuesta. También me gustaría saber cuándo un usuario ha votado en cada propuesta. No puedo hacer que funcione como se espera. Aquí está mi bucle PHP –
$owner = 'tom';
foreach($props as $props){
$lock_time = $props['lock_time'];
$my_proposal = $props['proposal'];
$owner = $props['owner'];
$approvals=0;
$rejects=0;
$is_voted = '';
foreach($votes as $votes){
$id = $votes['prop-id'];
$vote = $votes['vote'];
$vote_owner = $votes['vote-owner'];
if($lock_time == $id){
if($owner == $vote_owner){
$is_voted = 'true';
}else{
$is_voted = 'false';
}
if($vote == 'approve'){
$approvals++;
}elseif($vote == 'reject'){
$rejects++;
}
}
}
echo $my_proposal.' Voted= '.$is_voted;
}
Sospecho que es porque estoy verificando dentro del bucle de votos y mostrando fuera del bucle de votos, pero no estoy seguro de cuál es la forma correcta de hacerlo.
El resultado actual es todo “false”, el resultado esperado sería que Tom votó en 2 de las 3 propuestas, por lo que 2 son “true” y 1 es “false”.
Aquí tienes una demostración – http://sandbox.onlinephpfunctions.com/code/78d28ac1c251b0d006bfda6c2722b156bfaed32f
davy.ai
Para contar correctamente los votos para cada propuesta y determinar si un usuario ha votado en cada propuesta, es necesario mover la inicialización de
$is_voted
fuera del bucle que verifica los votos. Esto se debe a que solo deseas verificar si un usuario ha votado en una propuesta una vez, no cada vez que se recorre el array de votos.Aquí está el bucle PHP corregido:
En este bucle, la variable
$is_voted
se inicializa como una cadena vacía fuera del bucle de votos. Si el usuario no ha votado en la propuesta actual,$is_voted
sigue siendo una cadena vacía y la actualizamos a ‘false’ después del bucle de votos. Esto asegura que solo verifiquemos el voto de un usuario una vez y la salida sea la esperada.La salida de este bucle debería ser: