Haga un bucle en una matriz multidimensional e imprima solo dos valores de columna específicos por fila

3 minutos de lectura

avatar de usuario de esafwan
esafwan

¿Cómo puedo imprimir los valores de ruta de archivo y nombre de archivo de cada fila?

  Array (
    [0] => Array (
             [fid] => 14
             [list] => 1
             [data] => Array (
                         [alt] =>
                         Loop a multidimensional array and only print two specific column values per row =>
                       )
             [uid] => 1
             [filename] => trucks_10785.jpg
             [filepath] => sites/default/files/trucks_10785.jpg
             [filemime] => image/jpeg
             [filesize] => 143648
             [status] => 1
             [timestamp] => 1291424171
             [nid] => 8
           )
    [1] => Array (
             [fid] => 19
             [list] => 1
             [data] => Array (
                         [alt] =>
                         Loop a multidimensional array and only print two specific column values per row =>
                       )
             [uid] => 1
             [filename] => school.jpg
             [filepath] => sites/default/files/school.jpg
             [filemime] => image/jpeg
             [filesize] => 115355
             [status] => 1
             [timestamp] => 1292029563
             [nid] => 8
           )
    [2] => Array (
             [fid] => 20
             [list] => 1
             [data] => Array (
                         [alt] =>
                         Loop a multidimensional array and only print two specific column values per row =>
                       )
             [uid] => 1
             [filename] => Life_is_wonderful_by_iNeedChemicalX.jpg
             [filepath] => sites/default/files/Life_is_wonderful_by_iNeedChemicalX_0.jpg
             [filemime] => image/jpeg
             [filesize] => 82580
             [status] => 1
             [timestamp] => 1292029572
             [nid] => 8
           )
    [3] => Array (
             [fid] => 21
             [list] => 1
             [data] => Array (
                         [alt] =>
                         Loop a multidimensional array and only print two specific column values per row =>
                       )
             [uid] => 1
             [filename] => school_rural.jpg
             [filepath] => sites/default/files/school_rural.jpg
             [filemime] => image/jpeg
             [filesize] => 375088
             [status] => 1
             [timestamp] => 1292029582
             [nid] => 8
           )
  )

Avatar de usuario de Ish
ish

Usando un foreach bucle sin clave:

foreach($array as $item) {
    echo $item['filename'];
    echo $item['filepath'];

    // To know what's in $item
    echo '<pre>'; var_dump($item);
}

Usando un foreach bucle con una clave:

foreach($array as $i => $item) {
    echo $array[$i]['filename'];
    echo $array[$i]['filepath'];

    // $array[$i] is same as $item
}

Usando un for círculo:

for ($i = 0; $i < count($array); $i++) {
    echo $array[$i]['filename'];
    echo $array[$i]['filepath'];
}

var_dump es una función realmente útil para obtener una instantánea de una matriz u objeto.

  • También pago var_export, que imprime código PHP válido. Puede guardar eso en un archivo, luego escribir el código para recorrerlo allí antes de ponerlo en su código principal.

    – ben

    30 de marzo de 2017 a las 15:39

  • aquí hay un problema con el uso del método de bucle for. ¿Leí en alguna parte que el índice podría no existir?

    – Apagar las luces

    8 de septiembre de 2017 a las 4:32

  • Si el índice no está definido como ['a', 'b', 'c']entonces sus valores son 0,1 y 2.

    – Ish

    8 sep 2017 a las 17:57

avatar de usuario de obsergiu
observar

Para casos más especiales, también podrías usar este:

array_map(function($n) { echo $n['filename']; echo $n['filepath'];}, $array);

O de una manera menos compleja:

function printItem($n){
    echo $n['filename'];
    echo $n['filepath'];
}

array_map('printItem', $array);

Esto le permitirá manipular los datos de una manera más fácil.

Comenzando simple, sin HTML:

foreach($database as $file) {
    echo $file['filename'] . ' at ' . $file['filepath'];
}

Y de lo contrario, puede manipular los campos en el foreach.

Avatar de usuario de Kavinda Harshana
Kavinda Harshaná

foreach($array as $item => $values) {
    echo $values->filepath;
}

En PHP moderno, la desestructuración de matrices se puede usar para acceder solo a columnas de fila específicas. Para imprimir, la concatenación de cadenas y la interpolación se pueden evitar usando printf() en lugar de echo.

foreach ($array as ['filename' => $fn, 'filepath' => $fp]) {
    printf("filename: %s, filepath: %s\n", $fn, $fp);
}

Es un mal uso de una función nativa para llamar array_map() y NO usar su valor de retorno. Si se desea una iteración de estilo funcional, itere con array_walk() porque su valor de retorno no está diseñado para representar los datos iterados.

array_walk($array, fn($row) => 
    printf("filename: %s, filepath: %s\n", $row['filename'], $row['filepath'])
);

avatar de usuario de jakoubekcz
jakoubekcz

También puede usar esto sin crear variables adicionales ni copiar los datos en la memoria como lo hace foreach().

while (false !== (list($item, $values) = each($array)))
{
    ...
}

¿Ha sido útil esta solución?