0

次のような .txt ファイルがあります。

Test = 10849831 = August 6, 2013:
56cake = 0 = August 6, 2013:
Wwe = 812986192 = August 6, 2013:
Test = 346192 = August 9, 2013:

次に、次の PHP コードを使用します...

$Output = array();
$Lines = explode(":", $txt);

foreach($Lines as $line) {
    $Rows = array_map('trim', explode(" = ", $line));
    if(!isset($Rows[0], $Rows[1], $Rows[2])) continue;
    $Output[$Rows[0]] = array($Rows[1], $Rows[2]);
}

print_r($Output);

....txt ファイルを次のような多次元配列に変換するには:

Array
(
    [Test] => Array
        (
            [0] => 346192
            [1] => August 9, 2013
        )

    [56cake] => Array
        (
            [0] => 0
            [1] => August 6, 2013
        )

    [Wwe] => Array
        (
            [0] => 812986192
            [1] => August 6, 2013
        )
)

ただし、大きなエラーがあります。このコードは、重複するデータ値をすべて削除します。サンプルの txt ファイルでは、"Test" という名前の値が 2 つありましたが、コードは多次元配列に 1 つしか出力ません。

また、コードが最初の "Test" 要素 (多次元配列内) のデータを最新のもの (.txt ファイルの最後の行) にどのように置き換えたかにも注意してください。

配列内の最初の「Test」要素のデータは、.txt ファイルの最初の行のデータとさえ一致しませんTest = 10849831 = August 6, 2013:

この問題を解決するにはどうすればよいですか? 多次元配列を次のようにしたい:

Array
(
    [Test] => Array
        (
            [0] => 10849831
            [1] => August 6, 2013
        )

    [56cake] => Array
        (
            [0] => 0
            [1] => August 6, 2013
        )

    [Wwe] => Array
        (
            [0] => 812986192
            [1] => August 6, 2013
        )

    [Test] => Array
        (
            [0] => 346192
            [1] => August 9, 2013
        )
)
4

3 に答える 3

1

配列内で同じキーを 2 回使用することはできません。それで全部です。

そのため、「新しい」エントリを追加すると、古い値が上書きされます。

例:

$data = array("test" => "Content 1");
$data["test"] = "Content 2";

echo "<pre>" . print_r($data,1) . "</pre>";
//Will give you:
[test] => "Content 2"
于 2013-08-13T21:23:11.177 に答える
0

他の人が指摘したように、配列には同一のキーを含めることができないため、コードは望ましい結果をもたらさないため、データが上書きされています。ダゴンの答えはすべての重複を保存しますが、入力ファイルの各行の最初の要素を使用してキー検索を行う機能を失います。

キー検索を行う機能を保持する代替手段は次のとおりです。

foreach($Lines as $line) {
    $Rows = array_map('trim', explode(" = ", $line));
    if(!isset($Rows[0], $Rows[1], $Rows[2])) continue;
    if (array_key_exists($Rows[0], $Output))
        $Output[$Rows[0]][] = array($Rows[1], $Rows[2]);
    else
        $Output[$Rows[0]] = array(array($Rows[1], $Rows[2]));
}        

各行のデータを直接保持する代わりに、$Output の各キーは、テキスト ファイル内のそのキーを持つ行ごとに 1 つの要素を持つ配列を保持します。サンプル データを使用すると、結果の配列は次のようになります。

Array
(
    [Test] => Array
        (   
            [0] => Array
            (
                [0] => 10849831
                [1] => August 6, 2013
            )
            [1] => Array
            (
                [0] => 346192
                [1] => August 9, 2013
            )
        )

    [56cake] => Array
        (
            [0] => Array
            (
                [0] => 0
                [1] => August 6, 2013
            )
        )

    [Wwe] => Array
        (
            [0] => Array
            (
                [0] => 812986192
                [1] => August 6, 2013
            )
        )
)
于 2013-08-13T21:53:08.650 に答える