2014-07-21 44 views
1

而不是使用MySQL數據的工作,我已經創建了我的計劃,作爲內容數據的源使用CSV文件等PHP排序一系列複雜

我已成功能夠解析CSV和商店它變成一個複雜的數組,它具有以下標題行,即數組的鍵。

"Title","Year","Rated","Released","Runtime","Genre","Director","Writer","Actors","Plot","Language","Country","Awards","Poster","Metascore","imdbRating","imdbVotes","imdbID","Type","Response" 

我現在的階段是允許數組的動態ajax排序。

我有兩個字段,我允許在開始時排序,「年」和「標題」。

所以我傳遞不同的URL參數,如「yearasc」或「yeardesc」或「titleasc」或「titledesc」。

然後嘗試對此進行排序。

所以我做了一個不同的帖子,就是這麼做的。

首先,我創建了只存儲關鍵字段的新數組,我需要進行排序。

然後根據什麼類型,做一個不同的array_multisort。

array_multisort($year, SORT_ASC, $all_rows); 

但我得到的結果是多重複數據。

但是我不知道是否有第一行,是我經過任何排序後傳遞數據的函數所需的標題行,導致數組排序問題。

對於簡單的數組排序,現有函數是有意義的,並且工作正常。

但是對於複雜的問題,甚至理解如何解決這個問題也很複雜。

任何意見,想法或想法,表示讚賞和感謝。

謝謝!

+1

**問題:**你有什麼特別的理由說明你爲什麼選擇一個'csv'文件而不是數據庫選項? – Darren

回答

3

我沒有那麼很可能將幫助你實際的代碼,但我有一個建議,至於如何才能解決這個並使其工作..

保持簡單。首先,創建您自己的CSV,僅包含您想要排序的一個標題(年份或標題)。

寫你的代碼來排序。

然後,添加另一個(如果您以前使用Year,或者如果您以前使用過Title,則爲Year),然後根據需要進行排序。

然後,再添加一個標頭(比如說評級),表示您不需要要排序。

然後,您應該能夠使用原始CSV。

我會嘗試編寫簡單的方法,並保持每個處理的最小。

我希望有幫助。我意識到它的答案更具哲理性,所以如果它能幫助你完成工作,那麼它就會受到打擊或錯過。只要意識到這種方法確實會花更多的時間來寫作 - 但其背後的意義在於,你將首先消除所有「噪音」。它可以幫助你首先看到你的問題並解決問題。

+1

我對此投了票,因爲你在這裏有一些公平的有效答案,直到OP提供他的嘗試,幾乎不可能回答這個問題。 – Darren

+1

@Darren謝謝,我同意 –

+0

我不想重新創建csv,我只想把csv,我已經創建,並存儲在一個數組中,現在讓我能夠按它排序。 清楚了嗎? – crosenblum

1

您可以爲數組設置自定義排序功能。如果您需要保留原始數組密鑰,請使用asort()

<?php 
$sortfields = array('year', 'bleh'); 

function cmp($a, $b) { 
    global $sortfields; 
    foreach ($sortfields as $sortfield) { 
     $cmp = strcmp($a[$sortfield], $b[$sortfield]); 
     // if desc, invert sign of $cmp 
     if ($cmp !== 0) 
      return $cmp; 
    } 
    return 0; 
} 

usort($all_rows, "cmp"); 

usort()調用用戶定義的比較函數的功能,它從strcmp函數返回相同的邏輯:0,如果相等,< 0是$ a小於$ B和> 0如果$ a大於$更大灣

該函數將比較$ sortfields變量中設置的每個字段,如果它發現任何不同的比較(按順序設置),它將立即返回差異。

+0

這到底是什麼?你能解釋它的邏輯嗎? – crosenblum

+0

我更新了strcmp代碼並更新了邏輯。 – denisvm