0

我正在尝试从二维数组中创建一个列表,在每行中显示该位置的键和值。这是我制作的代码。

$array1=array(...);
$array2=array(...);
(...)
$array25=array(...); //this part works fine so I'm not posting all of it
$bigarray['array1']=$array1;
$bigarray['array2']=$array2;
//and so on. This also works as it should
$matrix=file(mylist.txt); //this file holds all the keys I want to print, with the format key1##key2

function printthelist($array)
{
    global $bigarray,$key1,key2;
    $line=explode("##",$array);
    $key1=$line[0];
    $key2=$line[1];
    echo 'Column:'.$key1.rtrim($key2).$bigarray[$key1][rtrim($key2)].'<br/>';
}

array_walk($matrix,'printthelist');

两个键都打印正确,但是当我尝试打印数组值时,它们只是不显示。我尝试使用固定值而不是变量作为键,它在函数内部和外部都有效。我一定错过了什么,我只是不知道是什么。

既然你问了,这里是其中一个数组的示例:

$ib=array();
$ib[4]='Diagnostics in hospitals';
$ib[5]='False positives';
$ib[6]='Risk Factors';
$ib[7]='Protect yourself from infections';

这是包含要打印的密钥的文件的内容:

other##16
invitro##9
ib##19
invitro##8
other##13
knowmore##14
psico##10
med##23
patients##19
patients##18
other##12
4

4 回答 4

1

我会以递归方式执行此操作 - 它适用于二维和二维数组:

function printArray($array)
{
    foreach($array as $key => $val)
    {
        if(is_array($val)
        {
            printArray($val);
        }
        else
        {
            // whatever you want really, using your code as example
            $line=explode("##",$array);
            $key1=$line[0];
            $key2=$line[1];
            echo 'Column:'.$key1.rtrim($key2).$bigarray[$key1][$key2].'<br/>';

        }
    }
}
于 2012-09-17T11:28:32.803 回答
0

尝试这个:

$array1=array(...);
$array2=array(...);
(...)
$array25=array(...); //this part works fine so I'm not posting all of it

global $bigarray;
$bigarray['array1']=$array1;
$bigarray['array2']=$array2;
//and so on. This also works as it should
$matrix=file(mylist.txt); //this file holds all the keys I want to print, with the format key1##key2

function printthelist($value, $key)
{
    global $bigarray;
    list($key1, $key2)=explode("##",$value);
    echo 'Column:'.$key1.rtrim($key2).$bigarray[$key1][$key2].'<br/>';
}

array_walk($matrix,'printthelist');
于 2012-09-17T11:21:23.440 回答
0

我发现了问题。file() 函数从文本文件创建一个数组,将每一行放在所述数组的位置。但是,它不会剥离 EOL 字符。这意味着以这种方式导入的每个值最后都有一个“/n”。在任何函数中使用此数据之前,您需要使用 rtrim() 将其删除。注意:这也意味着 file() 函数总是返回一个字符串数组,即使文件只包含数字。此函数的文档显示,可以通过在文件名后添加一个额外的参数来省略 EOL 字符,但是,它不适用于所有版本的 PHP。

我已经编辑了代码,现在可以正常工作了。

谢谢大家的帮助。

于 2012-09-24T10:16:03.783 回答
0

更新:

请尝试以下代码:

$matrix = file('mylist.txt');

function printthelist($array){
    global $bigarray;

    $line = explode('##', $array);

    $key1 = $line[0];
    $key2 = $line[1];
    echo 'Column: '.$key1.$key2.' : '.$bigarray[$key1][$key2].'<br/>';
}

array_walk($matrix, 'printthelist');
于 2012-09-17T11:34:55.037 回答