0

我偶然发现了几年前我第一次学习 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 开始。但是,数组太多了,我无法返回并将数组中的数字更改为低于当前值的 1。让 php 回显数组名称及其对应的值,然后将它们复制并粘贴到文本编辑器中,对我来说会容易得多。

4

4 回答 4

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.

于 2013-07-12T04:34:26.293 回答
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/>";
    }
}

?>
于 2013-07-12T05:25:34.133 回答
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
)
于 2013-07-12T04:57:24.577 回答
0

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

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

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

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

以下是一个非常粗略的 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.
}

我非常非常强烈地建议不要在日常代码中使用此功能,但是,在这种非常特殊的情况下,您确实出于非常特定的原因确实想要使用变量名,它可能会很方便。

于 2013-07-12T04:37:21.917 回答