从内部函数打印二维数组

时间:2012-09-17 11:03:39

标签: php arrays variables multidimensional-array

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

$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 个答案:

答案 0 :(得分: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/>';

        }
    }
}

答案 1 :(得分: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');

答案 2 :(得分: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');

答案 3 :(得分:0)

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

我编辑了代码,现在它运行正常。

谢谢大家的帮助。