0

CSV レポートの問題を解決しようとしています。ユーザーの選択に基づいて、レポート内の文字列に基づいて特定の情報を見つけようとしています。これは、さまざまなイベントと日付に関する情報を含むレポートです (イベントには複数の日付が含まれている可能性があるため、日付ごとに繰り返されるため、イベント名が複数発生します)。

ユーザーはいくつかの公演 (特定のイベント/日付の組み合わせ) を選択し、これらはeventIdそれぞれの番号を使用して配列に追加されます。

例えば

$eventArray = array(232 => 'event one', 21 => 'event four', 443 = 'event one');

それぞれの存在eventid => eventName(システム内の日付が異なるため、イベント名が重複する可能性があります)。

私は次のようにレポートを調べています。

       $file_handle = fopen("$reportUrl", "r");
       while(!feof($file_handle))
        {
           $line_of_text = fgetcsv($file_handle, 20000);
           include('logic/finance_logic.php');                                      
        }
       fclose($file_handle);

したがって、CSV の各行に対して、finance_logic.phpファイル内のコードが実行されます。私が苦労している部分は次のとおりです。

// CHECK TO SEE IF THE FIRST LINE IS AN EVENT IN THE ARRAY (NOTE, THERE CAN BE DOUPLICATES)
if(in_array(trim(substr($line_of_text[0],6)), $eventArray)) 
    {
        $f = 1;
        // get event name
        $eventName = trim(substr($line_of_text[0],6));
        // date of event
        $eventDateArray = getEventDateArray($eventName);
    }
    if(isset($f))
        {
            $dateSearch = checkDateInArray($line_of_text[0], $eventDateArray);
            if($f == 1 && $dateSearch[0] == 'found')
                {
                    $eventId = $dateSearch[1];
                    $f = 2;
                }

checkDateInArray機能は次のとおりです。

function checkDateInArray($date, $array)
{
    if(is_array($array))
        {
            foreach($array as $key => $d)
                {
                    if (strpos($date, $d) !== false) 
                        {
                            // return array with first value 'found' and second being the key which is the event id
                            return array('found', $key);
                        }
                }
        }
}

注: 時間は場所によって異なるため、最後に常に GMT があるとは限らないため、日付を比較する際にもこれを無視する必要があります。

これらはすべて、別の方法ではるかに簡単であると確信している何かの厄介な修正につながります。私が考えていた 1 つの方法は、作成されたイベント配列は ですeventId => eventNameが、はデータベース内のおよびにeventIdリンクされているということです。which wasを作成して、それがこれらにあるかどうかを確認する方法はありますか。どうすればいいのかわかりません。また、CSV のレイアウト方法の例は次のとおりです。eventNameeventDateeventArrayeventId => array('eventName', 'eventDate')

"Event: Event One"
""
"Performance Date:  15 Feb 2013 07:30 PM GMT"
""
"Venue: Theatre"
""
"Category: English Comedy"
"Discount","A",
"GENERAL ADMISSION",35.00,
"RESERVED",0.00,
"COMPLIMENTARY",0.00,
"SPECIAL",0.00,
"Holds","A","Face Value Amt",
"H: House Seats",16,16,
"Face Value Amt",,,
"--",,,
"Capacity",371,371,
""
"INT"
"Discount","A","A Face Value Amt","Tickets","Face Value Amt",
"GENERAL ADMISSION",119,4165.00,119,4165.00,
"Totals*",119,4165.00,119,4165.00,
""
"PBO"
"Discount","A","A Face Value Amt","Tickets","Face Value Amt",
"*SPECIAL",10,220.00,10,220.00,
"COMPLIMENTARY",4,0.00,4,0.00,
"GENERAL ADMISSION",22,770.00,22,770.00,
"RESERVED",0,0.00,0,0.00,
"Totals*",36,990.00,36,990.00,
""
"PHO"
"Discount","A","A Face Value Amt","Tickets","Face Value Amt",
"*GENERAL ADMISSION",0,0.00,0,0.00,
"*SPECIAL",42,940.00,42,940.00,
"COMPLIMENTARY",10,0.00,10,0.00,
"GENERAL ADMISSION",68,2380.00,68,2380.00,
"RESERVED",0,0.00,0,0.00,
"Totals*",120,3320.00,120,3320.00,
""
"PERFORMANCE TOTALS"
"Discount","A","A Face Value Amt","Tickets","Face Value Amt",
"*GENERAL ADMISSION",0,0.00,0,0.00,
"*SPECIAL",52,1160.00,52,1160.00,
"COMPLIMENTARY",14,0.00,14,0.00,
"GENERAL ADMISSION",209,7315.00,209,7315.00,
"RESERVED",0,0.00,0,0.00,
"Totals*",275,8475.00,275,8475.00,
""
"Abbreviated Performance Totals"
"Event","Performance Date","Discount","Tickets","Face Value Amt",
Event One,15 Feb 2013 07:30 PM GMT,*GENERAL ADMISSION,0,0.00,
Event One,15 Feb 2013 07:30 PM GMT,*SPECIAL,52,1160.00,
Event One,15 Feb 2013 07:30 PM GMT,COMPLIMENTARY,14,0.00,
Event One,15 Feb 2013 07:30 PM GMT,GENERAL ADMISSION,209,7315.00,
Event One,15 Feb 2013 07:30 PM GMT,RESERVED,0,0.00,
,,,275,8475.00,
""
"Event: Event One"
""
"Performance Date:  16 Feb 2013 07:30 PM GMT+04:00"
""
"Venue: Theatre"
""
"Category: English Comedy"
"Discount","A",
"GENERAL ADMISSION",35.00,
"RESERVED",0.00,
"COMPLIMENTARY",0.00,
"SPECIAL",0.00,
""
"INT"
"Discount","A","A Face Value Amt","Tickets","Face Value Amt",
"GENERAL ADMISSION",203,7105.00,203,7105.00,
"Totals*",203,7105.00,203,7105.00,
""
"PBO"
"Discount","A","A Face Value Amt","Tickets","Face Value Amt",
"GENERAL ADMISSION",36,1260.00,36,1260.00,
"RESERVED",0,0.00,0,0.00,
"Totals*",36,1260.00,36,1260.00,
""
"PHO"
"Discount","A","A Face Value Amt","Tickets","Face Value Amt",
"COMPLIMENTARY",15,0.00,15,0.00,
"GENERAL ADMISSION",99,3465.00,99,3465.00,
"RESERVED",-9,0.00,-9,0.00,
"Totals*",105,3465.00,105,3465.00,
""
"PERFORMANCE TOTALS"
"Discount","A","A Face Value Amt","Tickets","Face Value Amt",
"COMPLIMENTARY",15,0.00,15,0.00,
"GENERAL ADMISSION",338,11830.00,338,11830.00,
"RESERVED",-9,0.00,-9,0.00,
"Totals*",344,11830.00,344,11830.00,
""
"Abbreviated Performance Totals"
"Event","Performance Date","Discount","Tickets","Face Value Amt",
Event One,16 Feb 2013 07:30 PM GMT,COMPLIMENTARY,15,0.00,
Event One,16 Feb 2013 07:30 PM GMT,GENERAL ADMISSION,338,11830.00,
Event One,16 Feb 2013 07:30 PM GMT,RESERVED,-9,0.00,
,,,344,11830.00,
""
"Event: Event Four"
""
"Performance Date:  18 Feb 2013 07:30 PM BST"
""
"Venue: Theatre"
""
"Category: English Comedy"
"Discount","A",
"GENERAL ADMISSION",25.00,
"RESERVED",0.00,
"STUDENT",15.00,
"COMPLIMENTARY",0.00,
"Senior Citizen",10.00,
"SPECIAL",0.00,
""
"INT"
"Discount","A","A Face Value Amt","Tickets","Face Value Amt",
"GENERAL ADMISSION",79,1975.00,79,1975.00,
"Totals*",79,1975.00,79,1975.00,
""
"PBO"
"Discount","A","A Face Value Amt","Tickets","Face Value Amt",
"COMPLIMENTARY",2,0.00,2,0.00,
"GENERAL ADMISSION",32,800.00,32,800.00,
"RESERVED",0,0.00,0,0.00,
"Senior Citizen",4,40.00,4,40.00,
"Totals*",38,840.00,38,840.00,
""
"PHO"
"Discount","A","A Face Value Amt","Tickets","Face Value Amt",
"COMPLIMENTARY",10,0.00,10,0.00,
"GENERAL ADMISSION",100,2500.00,100,2500.00,
"RESERVED",0,0.00,0,0.00,
"STUDENT",4,60.00,4,60.00,
"Senior Citizen",2,20.00,2,20.00,
"Totals*",116,2580.00,116,2580.00,
""
"PERFORMANCE TOTALS"
"Discount","A","A Face Value Amt","Tickets","Face Value Amt",
"COMPLIMENTARY",12,0.00,12,0.00,
"GENERAL ADMISSION",211,5275.00,211,5275.00,
"RESERVED",0,0.00,0,0.00,
"STUDENT",4,60.00,4,60.00,
"Senior Citizen",6,60.00,6,60.00,
"Totals*",233,5395.00,233,5395.00,
""
"Abbreviated Performance Totals"
"Event","Performance Date","Discount","Tickets","Face Value Amt",
Event Four,18 Feb 2013 07:30 PM GMT,COMPLIMENTARY,12,0.00,
Event Four,18 Feb 2013 07:30 PM GMT,GENERAL ADMISSION,211,5275.00,
Event Four,18 Feb 2013 07:30 PM GMT,RESERVED,0,0.00,
Event Four,18 Feb 2013 07:30 PM GMT,STUDENT,4,60.00,
Event Four,18 Feb 2013 07:30 PM GMT,Senior Citizen,6,60.00,
,,,233,5395.00,

助けていただける方、よろしくお願いします。

4

1 に答える 1

0

私はこれを行うために次のことを行いました:

if(!isset($f))
    {
        $eventDateArray = checkIfEventInArray(trim(substr($line_of_text[0],6)), $eventArray);
    }
if($eventDateArray['result'] == true)
    {
        unset($eventDateArray['result']);
        $f = 1;
        // get event name
        $eventName = trim(substr($line_of_text[0],6));
    }
    if(isset($f))
        {
            if($f == 1 && strpos($line_of_text[0], 'Performance Date:') !== false)
                {
                    $dateCheck = checkIfDateInArray($line_of_text[0], $eventDateArray);
                }
            if($f == 1 && $dateCheck['result'] == true)
                {
                    $eventId = $dateCheck['eventId'];
                    $f = 2;
                }
            if($f == 1 && $line_of_text[0] == 'Abbreviated Performance Totals')
                {
                    unset($f);
                }

次の関数を使用します。

function selectedEventsArray($array)
    {
        if(is_array($array))
            {
                $editedArray = '"' . implode('","', $array) . '"';
                $eventArray = array();
                $sql = mysql_query("SELECT id_event, name_event, date_event, time_event FROM event WHERE id_event IN ($editedArray)");
                while ($row = mysql_fetch_array($sql))
                    {
                        date_default_timezone_set('Europe/Dublin');
                        $date = date_create($row['date_event']);
                        $for_date = date_format($date,'d M Y');
                        $time = date_create($row['time_event']);
                        $for_time = date_format($time,'h:i A');
                        $eventDate = "Performance Date:  $for_date $for_time";

                        $eventArray[$row['id_event']] = array($row['name_event'], $eventDate);
                    }
                return $eventArray;
            }
    }

function checkIfEventInArray($str, $eventArray)
    {
        $newArray = array();
        $newArray['result'] = false;
        foreach ($eventArray as $key => $i)
            {
                if(trim(strtolower(strip_tags($str))) == trim(strtolower(strip_tags($i[0]))))
                    {
                        $newArray['result'] = true;
                        $newArray[$key] = $i[1];
                    }
            }
        return $newArray;
    }

function checkIfDateInArray($dateStr, $eventDateArray)
    {
        $newArray = array();
        $newArray['result'] = false;
        foreach ($eventDateArray as $key => $i)
            {
                if (strpos($dateStr, $i) !== false)
                    {
                        $newArray['result'] = true;
                        $newArray['eventId'] = $key;
                    }
            }
        return $newArray;
    }
于 2013-03-30T01:26:15.420 に答える