Valore chiave del ciclo foreach di PHP


136

Sto eseguendo questa chiamata DB per ottenere un array multidimensionale Sto cercando di ottenere le chiavi di ciascuno, ma quando provo viene visualizzato vuoto o come array.

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

ecco il mio php che scorre attraverso:

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

<?php endforeach ?>

Anche quando eseguo un test che sputa l'array, questo è il risultato, quello che sto cercando di visualizzare è [Philadelphia]

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

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

Risposte:


382

È possibile accedere alle chiavi dell'array in questo modo:

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

Questo metodo restituisce solo 'array'
matthewb

Cosa succede se si eco $ chiave? Nah. Non se lo esegui sull'array che Philadelphiaè la chiave di. Puoi mostrare del codice?
Pekka,

Funziona, la mia dichiarazione mysql ha avuto anche un piccolo problema ma l'ho fatto funzionare con la tua soluzione, grazie.
matthewb,

32

Come Pekka ha affermato sopra

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

Inoltre potresti voler provare una funzione ricorsiva

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

Puoi anche usare array_keys(). Amico dei principianti:

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

    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.