Alternativa a foreach ?!

Mr. PHP

Utente Attivo
31 Gen 2013
141
0
0
Ciao vorrei sapere sei esiste un alternativa al foreach. Vorrei usare il ciclo for:
PHP:
$array = [ 'Red', 'White', 'Black' ];

for( $i=0; $i < count( $array ); $i++ )
   echo $array[$i].'<br />';

/* Il Problema e che se ce un array senza una chiave numerica come posso fare senza usare foreach o il while */

$array = [ 'Mela' => 'Rossa', 'Schermo' => 'Nero'  ecc... ];

while( list( $k, $v ) = each( $array ) )
   echo $array[$i].'<br />';
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, crei una varibile contatore e la incrementi all'interno del ciclo
PHP:
$contatore = 0;
foreach($array => $value) {
      echo $contatore . " " . $value ."<br/>";
      $contatore++;
}
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ok, non avevo capito , prova cosi
PHP:
<?php

$array = array(
    "uno" => "valore 1",
    "due" => "valore 2",
    "tre" => "valore 3"
);

for ($i = 0; $i < count($array); $i++) {
    echo array_keys($array)[$i] . "<br/>";
}
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Sorry, oggi sono fuso
PHP:
for ($i = 0; $i < count($array); $i++) {
    echo $array[array_keys($array)[$i]] . "<br/>";
}
 

Mr. PHP

Utente Attivo
31 Gen 2013
141
0
0
Sorry, oggi sono fuso
PHP:
for ($i = 0; $i < count($array); $i++) {
    echo $array[array_keys($array)[$i]] . "<br/>";
}
Ecco le alternative a foreach con ciclo for e while:

PHP:
$array = [ 'Mela' => 'Rosso', 'Zucchina' => 'Verde', 'Banana' => 'Giallo' ];
		
for ( $i=0; $i < count( $array ); $i++) { 
			
   $key = array_keys($array)[$i];
   $value = $array[array_keys($array)[$i]];
			
   echo $key.' '.$value.'<br />;
			
}

while( list( $key, $value ) = each( $array ) ){

   echo $key.' '.$value.'<br />';

}
Un altra cosa e meglio usare il foreach o le alternative con for e while in termini di prestazioni di php ?
 

Mr. PHP

Utente Attivo
31 Gen 2013
141
0
0
Ho effettuato dei test per verificare la velocita di esecuzione di ogni ciclo con microtime e il risultato e che se se abbiamo una chiave definita e molto piu veloce il ciclo while:
PHP:
$array = [ 'Mela' => 'Rossa', 'Banana' => 'Giallo' ];

while( list( $key, $value ) = each( $array ) )
   echo $key.' '.$value.'<br />';
altrimenti se abbiamo una chiave numerica e molto piu veloce il ciclo for:
PHP:
$array = [  'Rossa', 'Giallo' ];

for( $i=0; $i < count( $array ); $i++ )
   echo $array[$i].'<br />';