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
            )
matthewb
fuente

Respuestas:

382

Puede acceder a sus teclas de matriz de esta manera:

foreach ($array as $key => $value)
Pekka
fuente
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 />";
        }
    }
}
Phill Pafford
fuente
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>';
}
Melih Yıldız '
fuente
6
foreach($shipmentarr as $index=>$val){    
    $additionalService = array();

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

        array_push($additionalService,$value);

    }
}
kumar
fuente