Valor da chave do loop foreach do PHP

136

Estou executando essa chamada de banco de dados para obter uma matriz multidimensional. Estou tentando obter as chaves de cada uma, mas quando tento aparece em branco ou 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;

aqui está o meu php que percorre:

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

<?php endforeach ?>

Além disso, quando eu executo um teste que apenas expõe a matriz, este é o resultado. O que estou tentando renderizar é [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
            )
matthewb
fonte

Respostas:

382

Você pode acessar suas chaves de matriz assim:

foreach ($array as $key => $value)
Pekka
fonte
Este método retorna apenas 'array'
matthewb
O que, se você ecoar $ key? Nah. Não se você executá-lo na matriz que Philadelphiaé a chave de. Você pode mostrar algum código?
Pekka
Isso funciona, minha instrução mysql também teve um pequeno problema, mas eu consegui trabalhar com sua solução, obrigado.
matthewb 02/12/2009
32

Como Pekka afirmou acima

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

Você também pode tentar uma função 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
fonte
8

Você também pode usar array_keys(). Novato amigável:

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

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

        array_push($additionalService,$value);

    }
}
kumar
fonte