获取数组的变量名称

时间:2013-07-12 04:28:32

标签: php arrays

我偶然发现了几年前我写的一些代码,当时我第一次学习PHP并且不知道数组从0开始而不是1。

$afc_east[1] = "Buffalo Bills";
$afc_east[2] = "Miami Dolphins";
$afc_east[3] = "New England Patriots";
$afc_east[4] = "New York Jets";

$afc_west[1] = "Denver Broncos";
$afc_west[2] = "Kansas City Chiefs";
$afc_west[3] = "Oakland Raiders";
$afc_west[4] = "San Diego Chargers";

//.... other divisions...

//Put all of the arrays into one
$afc = array($afc_east, $afc_west, $afc_north, $afc_south);

for($i=0;$i<count($afc);$i++)
{   
    $count = count($afc[$i]);   

    for($y=1;$y<=$count;$y++)
    {
        // I'd like to find out how to echo "afc_east" or "afc_west"
        $name_of_array = ""; //Idk
        echo "$".$name_of_array."[".$y-1."]" = ".$afc[$i][$y].";<br />";
    }

}

我想让我的所有数组从0开始。但是,有太多的数组让我回去并将数组中的数字更改为低于它们当前的数字。让我更容易让php回显数组名称及其相应的值,然后将它们复制并粘贴到文本编辑器中。

4 个答案:

答案 0 :(得分:2)

如果所有元素都以正确的顺序声明,您只需删除硬编码键并让PHP枚举:

$afc_east[1] = "Buffalo Bills";
$afc_east[2] = "Miami Dolphins";
$afc_east[3] = "New England Patriots";
$afc_east[4] = "New York Jets";

变为

$afc_east = array(); // Optional
$afc_east[] = "Buffalo Bills";
$afc_east[] = "Miami Dolphins";
$afc_east[] = "New England Patriots";
$afc_east[] = "New York Jets";

您的编辑器应该允许您通过正则表达式替换,例如将(\$[a-z_]+\[)\d+(\] =)替换为\1\2

答案 1 :(得分:0)

PHP不提供此功能。请考虑以下事项:

$foo = array("a", "b", "c");
$bar = $foo;

阵列的名称是foo还是bar?都?都不是?这里真正的答案是数组是它自己的对象,它不会跟踪它的存储位置。如果将它存储在其他地方,则会丢失有关其存储的其他变量的所有信息。

...叹息。我相信用你的文本编辑器有更好的方法来做到这一点,但是,如果我们想做的就是调整你的代码以使其按预期工作,我们可以使用......谢谢,我不敢相信我是要说这个...... variable variables

以下是一个非常粗略的PHP功能,我真的不喜欢,但在这种非常具体的情况下可能会有用:

$username = "Matchu";
$var_name = "username";
echo $$var_name; // echoes "Matchu"

不是将数组存储在数组中并迭代那些,而是迭代变量名称:

$afc = array("afc_east", "afc_west", "afc_north", "afc_south");
foreach($afc as $name_of_array) {
    $array_value = $$name_of_array;
    // Ta da, you have the variable name and the array stored in it. Go crazy.
}

我非常非常强烈建议您不要在日常代码中使用此功能,但是,在这种非常特殊的情况下,您实际上确实希望使用变量名称来处理非常具体的原因,它可以很方便。

答案 2 :(得分:0)

如果你必须重新索引数组并在数组中有数字键,你可以简单地

$myarray = array_values($myarray);
// example 
$afc_east[1] = "Buffalo Bills";
$afc_east[2] = "Miami Dolphins";
$afc_east[3] = "New England Patriots";
$afc_east[4] = "New York Jets";
$afc_east = array_values($afc_east);
echo '<pre>';
print_r($afc_east);

输出:

Array
(
[0] => Buffalo Bills
[1] => Miami Dolphins
[2] => New England Patriots
[3] => New York Jets
)

答案 3 :(得分:0)

这里的脚本很快,又很脏

<?php

$afc_east[1] = "Buffalo Bills";
$afc_east[2] = "Miami Dolphins";
$afc_east[3] = "New England Patriots";
$afc_east[4] = "New York Jets";

$afc_west[1] = "Denver Broncos";
$afc_west[2] = "Kansas City Chiefs";
$afc_west[3] = "Oakland Raiders";
$afc_west[4] = "San Diego Chargers";

$afc = array($afc_east,$afc_west);
$count = 0;
foreach($afc as $arr){
        $total = count($arr);
        for($i=0;$i<=$total-1;$i++){
            $afc[$count][$i] = array_shift($arr);           
        }
        array_unshift($afc[$count],$afc[$count][0]);
        array_pop($afc[$count]);
        array_pop($afc[$count]);
        $count++;
}
//Output code to check if everything went correctly
foreach($afc as $arr){
    foreach($arr as $key=>$value){
            echo $key."->".$value."<br/>";
    }
}

?>