1

行ごとに読み込んで処理しているテキスト ファイルがあり、結果の変数 (後処理) をネストされた配列に入れたいので、テキスト ファイルの新しい行ごとに新しいインデックスが配列に作成されます。ネストされた連想配列に 2 つの値が配置されています。これまでのところ問題ありません。

$arr = file('file.txt') or die('ERROR: Cannot find file');
$add_data = array(array('opc'=>$outward_pc,'lkey'=>$lkey));
$i=0;

foreach ($arr as $line) {

    $outward_pc = trim(substr($line,0,4));
    $lkey = trim(substr($line,15,6));

    $add_data[$i]['opc'] = $outward_pc;
    $add_data[$i]['lkey'] = $lkey;

    $i++;
}

ただし、これらの 2 つの変数をネストされた配列に追加したい場合は、組み合わせた値が一意である場合に のみ注意が必要です。たとえば、以下の変数ペアから、「AB10」と「AB10」の組み合わせとして 4 つの新しいインデックスを配列に追加したいだけです。 '000002'、'AB10' と '000004'、'AB21' と '000003' が複数回出現

'AB10' and '000002'
'AB10' and '000002'
'AB10' and '000004'
'AB10' and '000004'
'AB21' and '000002'
'AB21' and '000003'
'AB21' and '000003'

私はネストされた (そして連想) 配列を扱っているため、特に !in_array 関数を正しく記述する方法に関して、Web 上のあらゆる形式の文献を入手するのが難しいことが証明されていると思います。私はこれまで、正しい構文に近いものを思いつくことができず、惨めに失敗してきました。私の(確かに貧弱な)飛び回っている様子を以下に示します。

if (!in_array(array($outward_pc, $lkey), $add_data)) {

    $add_data[$i]['opc'] = $outward_pc;
    $add_data[$i]['lkey'] = $lkey;

}

どんな助けもありがたく受け取った!

4

1 に答える 1

2

$add_data2 つの値の連結を作成し、それを配列のキーとして使用してみませんか。そうすれば、重複する値は互いに上書きされます。

foreach ($arr as $line) {

    $outward_pc = trim(substr($line,0,4));
    $lkey = trim(substr($line,15,6));
    $key = $outward_pc . $lkey;

    $add_data[$key]['opc'] = $outward_pc;
    $add_data[$key]['lkey'] = $lkey;
}
于 2013-01-24T16:12:27.103 に答える