php - Salida de valores separados por comas en el bucle foreach

CorePress2024-01-24  8

Esta pregunta ya tiene respuestas aquí: ¿Cómo creo una lista separada por comas a partir de una matriz en PHP?

(11 respuestas)

Eliminar elementos de matriz vacíos

(27 respuestas)

Cerrado

hace 2 años

.

Tengo esta matriz:

  $bonusarraymain = array(

     array( "bonus1"=> "Testitem" , 
         ),
     array( "bonus2"=> "" , 
         ),
     array( "bonus3"=> "444" , 
         ),
     array( "bonus4"=> "" , 
         )
    );

Quiero hacer eco de los valores que no están vacíos. Los valores también deben estar separados por una coma entre sí. No debería haber una coma después del último valor.

Así es como genero los valores, pero ¿cómo puedo separarlos con comas?

          foreach ($bonusarraymain as $bonus) {
                echo $bonus['bonus1'];
                echo $bonus['bonus2']['0'];
                echo $bonus['bonus2']['1'];
                echo $bonus['bonus3'];
                echo $bonus['bonus4'];
            
       }

Entonces tengo una coma después del último valor. Necesito verificar cuál es el último valor para que no establezca una coma después de este valor.

-Berstos

27 de marzo de 2021 a las 1:41



------------------------------------

Crea una nueva matriz con esos valores y usa implode() para insertar la coma

foreach ($bonusarraymain as $bonus) {
      $items = array($bonus['bonus1'], 
                     $bonus['bonus2']['0'],
                     $bonus['bonus2']['1'],
                     $bonus['bonus3'],
                     $bonus['bonus4']);
      echo implode(',' , $items);            
}

Dejará que usted descubra cómo filtrar los vacíos. Sugerencia: array_filter()

0



------------------------------------

También podría usar array_reduce para completar una nueva matriz filtrada y luego simplemente unir la matriz resultante con implode.

<?php
$bonusarraymain = [
    [ "bonus1"=> "Testitem" ], 
    [ "bonus2"=> "" ],
    [ "bonus3"=> "444" ],
    [ "bonus4"=> "" ]
];

echo implode(', ', array_reduce($bonusarraymain, function($acc, $cur) {
    $cur = array_values($cur);
    if (isset($cur[0]) && !empty($cur[0])) $acc[] = $cur[0];
    return $acc;
}, []));

Resultado: elemento de prueba, 444

1

isset() && !empty() es un antipatrón que no debería existir en ningún código por ningún motivo. stackoverflow.com/a/4559976/2943403

-mickmackusa

29/04/2023 a las 21:47



------------------------------------

Es difícil ver lo que estás intentando hacer. ¿Se supone que $test es $bonus?

Actualización:

Utilice un bucle for y compruebe el índice. Algo como esto:

for ($bonusId = 0; $bonusId < count($bonusarraymain); $bonusId++) {
  echo $bonus['bonus1'] . ",";
  echo $bonus['bonus2']['0'] . ",";
  echo $bonus['bonus2']['1'] . ",";
  echo $bonus['bonus3'] . ",";
  echo $bonus['bonus4'];

  if ($bonusId < count($bonusarraymain)-1) {
    echo ","
  }        
}

2

Sí, lo cambié. Pero, ¿cómo puedo obtener comas entre los valores excepto después del último?

-Berstos

27 de marzo de 2021 a las 1:52

Actualicé mi respuesta para contener tu respuesta.

- JohnFF

27 de marzo de 2021 a las 1:57

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare