Valor de clave de bucle foreach de PHP


136

Estoy ejecutando esta llamada de base de datos para obtener una matriz multidimensional. Estoy tratando de obtener las claves de cada una, pero cuando lo intento aparece en blanco o como matriz.

$root_array = array();
$sites = $this->sites($member_id);
foreach ($sites as $site){
    $records = $this->db->select('p.name as place_name, p.id as place_id,p.active as place_status')
                ->from('places p')
                ->join('members_permissions pm','pm.sites_id = p.sites_id and pm.members_id ='.$member_id)
                ->where('p.active', 0)
                ->get();

    $places = $records->result_array();
    $places['name'] = $site['name'];
    foreach($places as $place){
       $root_array[$site['name']][] = $place;
    }

}
return $root_array;

Aquí está mi php que recorre:

<?php foreach($places as $site): ?>
    <h5><?=key($site)?></h5>
        <?php foreach($site as $place): ?>
            <h6><?=$place['place_name']?></h6>
        <?php endforeach?>

<?php endforeach ?>

Además, cuando ejecuto una prueba que solo escupe la matriz, este es el resultado, lo que estoy tratando de procesar es [Filadelfia]

[Philadelphia] => Array
        (
            [0] => Array
                (
                    [place_name] => XYX
                    [place_id] => 103200
                    [place_status] => 0
                )

            [1] => Array
                (
                [place_name] => YYYY
                [place_id] => 232323
                [place_status] => 0
            )

Respuestas:


382

Puede acceder a sus teclas de matriz de esta manera:

foreach ($array as $key => $value)

Este método solo devuelve 'array'
matthewb

¿Qué pasa si te haces eco de la tecla $? Nah No si lo ejecutas en la matriz de la que Philadelphiaes clave. ¿Puedes mostrar algún código?
Pekka el

Esto funciona, mi declaración mysql también tuvo un problema menor, pero lo hice funcionar con su solución, gracias.
matthewb

32

Como dijo Pekka arriba

foreach ($array as $key => $value)

También es posible que desee probar una función recursiva

displayRecursiveResults($site);

function displayRecursiveResults($arrayObject) {
    foreach($arrayObject as $key=>$data) {
        if(is_array($data)) {
            displayRecursiveResults($data);
        } elseif(is_object($data)) {
            displayRecursiveResults($data);
        } else {
            echo "Key: ".$key." Data: ".$data."<br />";
        }
    }
}

8

También puedes usar array_keys(). Novato amigable:

$keys      = array_keys($arrayToWalk);
$arraySize = count($arrayToWalk);

for( $i=0; $i < $arraySize; $i++ ) {
    echo '<option value="' . $keys[$i] . '">' . $arrayToWalk[$keys[$i]] . '</option>';
}

6
foreach($shipmentarr as $index=>$val){    
    $additionalService = array();

    foreach($additionalService[$index] as $key => $value) {

        array_push($additionalService,$value);

    }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.