Nasıl bir foreach döngü içinde geçerli dizi dizinini alabilirim?

7 Cevap php

Nasıl bir foreach döngü içinde geçerli dizin alabilirim?

foreach ($arr as $key => $val)
{
    // How do I get the index?
    // How do I get the first element in an associative array?
}

7 Cevap

Sizin örnek kod, sadece olurdu $key.

Eğer bu ilk ise, örneğin, bilmek istiyorsanız, ikinci, ya da ben döngü th yineleme, bu tek seçenek:

$i = -1;
foreach($arr as $val) {
  $i++;
  //$i is now the index.  if $i == 0, then this is the first element.
  ...
}

Tabii ki, bu $val == $arr[$i] dizisi birleşmeli dizi olabilir çünkü anlamına gelmez.

Bu şimdiye kadar en ayrıntılı cevap ve çevresinde yüzen bir $i değişkeni için ihtiyaç kurtulur. Bu Kip ve Gnarf yanıtları bir combo.

$array = array( 'cat' => 'meow', 'dog' => 'woof', 'cow' => 'moo', 'computer' => 'beep' );
foreach( array_keys( $array ) as $index=>$key ) {

    // display the current index + key + value
    echo $index . ':' . $key . $array[$key];

    // first index
    if ( $index == 0 ) {
        echo ' -- This is the first element in the associative array';
    }

    // last index
    if ( $index == count( $array ) - 1 ) {
        echo ' -- This is the last element in the associative array';
    }
    echo '<br>';
}

Birine yardımcı olur umarım.

foreach($array as $key=>$value) {
    // do stuff
}

$key her $array elemanın indeks

$key geçerli dizi elemanı için indeks, ve $val bu dizi elemanının değeridir.

The first element has an index of 0. Therefore, to access it, use $arr[0]

Dizinin ilk elemanı almak için, bu kullanım

$firstFound = false;
foreach($arr as $key=>$val)
{
    if (!$firstFound)
       $first = $val;
    else
       $firstFound = true;
    // do whatever you want here
}

// now ($first) has the value of the first element in the array

Güncel indeks $key değeridir. Ve diğer soru için, siz de kullanabilirsiniz:

current($arr)

Eğer dizinin iç işaretçisini değiştirmek için next(), prev() veya diğer işlevler olmadığını varsayarak, herhangi bir dizinin ilk elemanı almak için.

Sen array_keys() function as well. Or array_search() the keys for the "index" of a key. If you are inside a foreach döngüde ilk öğe alabilir, (kip veya cletus tarafından önerilen) basit artan bir sayaç olsa muhtemelen en etkili yöntemdir.

<?php
   $array = array('test', '1', '2');
   $keys = array_keys($array);
   var_dump($keys[0]); // int(0)

   $array = array('test'=>'something', 'test2'=>'something else');
   $keys = array_keys($array);

   var_dump(array_search("test2", $keys)); // int(1)     
   var_dump(array_search("test3", $keys)); // bool(false)

de bu sorun için ilk google isabet beri:

function mb_tell(&$msg) {
    if(count($msg) == 0) {
        return 0;
    }
    //prev($msg);
    $kv = each($msg);
    if(!prev($msg)) {
        end($msg);

        print_r($kv);
        return ($kv[0]+1);
    }
    print_r($kv);
    return ($kv[0]);
}