Valeur de clé de boucle PHP foreach

136

J'exécute cet appel de base de données pour obtenir un tableau multidimensionnel. J'essaie d'obtenir les clés de chacun, mais lorsque j'essaye, il est vide ou sous forme de tableau.

$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;

voici mon php qui boucle à travers:

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

<?php endforeach ?>

Aussi, quand j'exécute un test qui crache juste le tableau, c'est le résultat, ce que j'essaie de rendre est [Philadelphie]

[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
la source

Réponses:

382

Vous pouvez accéder à vos clés de tableau comme ceci:

foreach ($array as $key => $value)
Pekka
la source
Cette méthode ne renvoie que 'array'
matthewb
Et si vous faites écho à $ key? Non. Pas si vous l'exécutez sur le tableau qui Philadelphiaest une clé de. Pouvez-vous montrer du code?
Pekka
Cela fonctionne, ma déclaration mysql avait également un problème mineur mais je l'ai fait fonctionner avec votre solution, merci.
matthewb
32

Comme Pekka l'a déclaré ci-dessus

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

Vous pouvez également essayer une fonction récursive

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
la source
8

Vous pouvez également utiliser array_keys(). Débutant convivial:

$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 '
la source
6
foreach($shipmentarr as $index=>$val){    
    $additionalService = array();

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

        array_push($additionalService,$value);

    }
}
Kumar
la source