代码之家  ›  专栏  ›  技术社区  ›  Xenph Yan

foreach访问索引或关联数组

  •  4
  • Xenph Yan  · 技术社区  · 16 年前

    我有以下代码片段。

    $items['A'] = "Test";
    $items['B'] = "Test";
    $items['C'] = "Test";
    $items['D'] = "Test";
    
    $index = 0;
    foreach($items as $key => $value)
    {
        echo "$index is a $key containing $value\n";
        $index++;
    }
    

    预期输出:

    0 is a A containing Test
    1 is a B containing Test
    2 is a C containing Test
    3 is a D containing Test
    

    有没有办法把 $index 变量?

    3 回复  |  直到 16 年前
        1
  •  14
  •   Brent    16 年前

    你的$index变量有点误导人。这个数字不是索引,你的“A”、“B”、“C”、“D”键是。您仍然可以通过编号的索引$index[1]访问数据,但这不是重点。如果你真的想保留编号索引,我几乎要重组数据:

    $items[] = array("A", "Test");
    $items[] = array("B", "Test");
    $items[] = array("C", "Test");
    $items[] = array("D", "Test");
    
    foreach($items as $key => $value) {
        echo $key.' is a '.$value[0].' containing '.$value[1];
    }
    
        2
  •  4
  •   brismuth    7 年前

    您可以这样做:

    $items[A] = "Test";
    $items[B] = "Test";
    $items[C] = "Test";
    $items[D] = "Test";
    
    for($i=0;$i<count($items);$i++)
    {
        list($key,$value) = each($items[$i]);
        echo "$i $key contains $value";
    }
    

    我以前没有这样做过,但理论上应该是可行的。

        3
  •  1
  •   nickf    16 年前

    小心你在那里定义你的钥匙。当您的示例有效时,它可能并不总是:

    $myArr = array();
    $myArr[A] = "a";  // "A" is assumed.
    echo $myArr['A']; // "a" - this is expected.
    
    define ('A', 'aye');
    
    $myArr2 = array();
    $myArr2[A] = "a"; // A is a constant
    
    echo $myArr['A']; // error, no key.
    print_r($myArr);
    
    // Array
    // (
    //     [aye] => a
    // )