無料WEB素材の配布とクリエーター作品展示 XTREC

PHP、アート、カフェ、ヒーリング、音楽などなど様々なジャンルのコラムを配信中!

  • 複数の配列の結合・合体には便利な関数「array_merge」を使うが、思わぬところに落とし穴・・・・

    現在開発中の案件で幾つかのCSVファイル(ログファイル)を読み取って、連想配列に格納後、ひとつの配列に合体させようと普通にarray_mergeを使う。
    ところがエラーで結合が出来ない。

    いろいろ調べてみると、PHP5からarray_mergeの仕様が変わったみたい。

    PHP本家サイトで警告表示で
    「array_merge() の動作は PHP 5 で変更されました。PHP 4 とは異なり、 array_merge() は、array 型のパラメータのみを受け取るようになりました。しかし、 他の型をマージするために型キャストを使用することも可能です。 詳細は以下の例を参照してください。」
    とのこと。

    って事で以下にPHP4〜5どちらも対応できるサンプルを書いておきます。
  • 連想配列同士の結合
    <?php
    $data1 = array(
                    array(
                        'name' => '山田 太郎',
                        'email' => 'taro@yamda.jap',
                        ),
                    array(
                        'name' => '山田 花子',
                        'email' => 'hanako@yamda.jap',
                        )
                    );

    $data2 = array(
                    array(
                        'name' => '佐藤 幸一',
                        'email' => 'koichi@sato.jap',
                        ),
                    array(
                        'name' => '佐藤 幸二',
                        'email' => 'koji@sato.jap',
                        )
                    );

    $result = phpversion() > '5' ? array_merge($data1, $data2) : array_merge((array)$data1, (array)$data2);

    print_r($result);

    /*
    Array
    (
    [0] => Array
    (
    [name] => 山田 太郎
    [email] => taro@yamda.jap
    )

    [1] => Array
    (
    [name] => 山田 花子
    [email] => hanako@yamda.jap
    )

    [2] => Array
    (
    [name] => 佐藤 幸一
    [email] => koichi@sato.jap
    )

    [3] => Array
    (
    [name] => 佐藤 幸二
    [email] => koji@sato.jap
    )

    )
    */
    ?>


    複数のCSVファイルを読み取って合体させるサンプル。
    CSVの中身は上記と同様、名前,メールアドレスとしてある。
    <?php
    $csv = array('1.csv', '2.csv');

    $result = array();
    foreach($csv as $filename) {
        $csvData = csvReading($filename);
        $result = phpversion() > '5' ? array_merge($result, $csvData) : array_merge((array)$result, (array)$csvData);
    }

    print_r($result);
    //出力は上記と同じ

    function csvReading($filename) {
        $fp = fopen($filename, 'r');
        setlocale(LC_ALL, 'ja_JP.SJIS'); //日本語文字化け対策
        while(($data = fgetcsv($fp, 1000, ",")) !== false) {
            $object[] = array("name" => $data[0], "email" => $data[1]);
        }
        fclose($fp);
        return $object;
    }
    ?>


リファラーが空なのでブラウザで前のページにお戻りください。

Copyright © 2005-2008 クリエーターの作品展示とWEB素材の配布サイト「XTREC」 All Rights Reserved.

Designed by HISABO