我正在尝试从二维数组中创建一个列表,显示每个行中的键和该位置的值。这是我做的代码。
$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
答案 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。
我编辑了代码,现在它运行正常。
谢谢大家的帮助。