0

2次元配列からリストを作成し、各行のその位置にあるキーと値の両方を表示しようとしています。これは私が作成したコードです。

$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');

両方のキーは正しく印刷されますが、配列値を印刷しようとすると、表示されません。キーとして変数の代わりに固定値を試しましたが、関数の内部と外部の両方で機能しました。私は何かが欠けているに違いない、私はただ何がわからない。

あなたが尋ねたので、ここに配列の1つのサンプルがあります:

$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

私はこれを再帰的に行います-2次元配列と2次元配列の両方で機能します:

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

アップデート:

このコードを試してください:

$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 に答える
0

問題を見つけました。file()関数は、テキストファイルから配列を作成し、すべての行をその配列の位置に配置します。ただし、EOL文字は削除されません。これは、この方法でインポートされたすべての値の最後に「/n」があることを意味します。関数内でこのデータを使用する前に、rtrim()で削除する必要があります。注:これは、ファイルに数値しか含まれていない場合でも、file()関数が常に文字列の配列を返すことも意味します。この関数のドキュメントには、ファイル名の後にパラメーターを追加することでEOL文字を省略できることが示されていますが、すべてのバージョンのPHPで機能するわけではありません。

コードを編集しましたが、正常に動作します。

よろしくお願いします。

于 2012-09-24T10:16:03.783 に答える