2010-03-18 69 views
2

我有一個CSV文件,2列名稱&圖片的JavaScript和jQuery的多維數組查找,使用CSV文件

我使用Javascript/PHP讀取和自動完成搜索字段中顯示的名稱列表。

// - >這就是我們假設發生< - //

當用戶進行搜索時,他們輸入的東西到文本字段,自動完成下拉與所有可用的名稱匹配的有查詢,他們點擊搜索,加載圖標顯示幾秒鐘,而代碼檢查匹配,然後結果顯示給用戶使用jQuery(即將使用向下滑動操作顯示結果,在主#searchbox )

我無法從搜索中獲取信息來匹配我的數組值,併爲名稱值帶回相關圖像..我需要的僅僅是搜索字段值t Ø帶回這個名字的產生密切相關的相關圖像......並顯示圖像和標題在結果DIV用戶...

到目前爲止的代碼如下..

// PHP來讀取csv文件並構建陣列

<?php 
$maxlinelength = 1000; 
$fh = fopen('tartans.csv', 'r'); 
$firstline = fgetcsv($fh, $maxlinelength); 
$cols = count($firstline); 

$row = 0; 
$inventory = array(); 

    while (($nextline = fgetcsv($fh, $maxlinelength)) !== FALSE) 
    { 
     for ($i = 0; $i < $cols; ++$i) 
        { 
     $inventory[$firstline[$i]][$row] = $nextline[$i]; 
    } 
    ++$row; 
} 
fclose($fh); 
?> 

// Javascript & php;

包括在汽車的名稱完整的腳本 這個名字產生從CSV列表,用逗號分隔,然後使用JavaScript分裂()函數,它加載的所有名稱的自動完成的功能..

<script type="text/javascript"> 
$(document).ready(function(){ 
    var data = '<?php foreach($inventory['NAME'] as $key => $value){ 
          echo $value.","; 
       }?>'.split(","); 
    $("#s").autocomplete(data); 
}) 
</script> 

//將jQuery來處理表單提交併返回結果

<script type="text/javascript"> 
$(document).ready(function() { 

    $('#loader').hide(); 
    $('#tartanResults').hide(); 

    $('#submit').click(function() { 
    $.ajax({ 
     url: '/select_tartan.php', // current page 
     beforeSend: function() { 
        $('#loader').show(); 
       }, 
       complete: function() { 
      $('#loader').hide(); 
      $('#tartanResults').show(); 
     } 
    }); 
     return false; 
    });// submit 
});// doc ready 
</srcipt> 

現在這是有問題的IM,試圖數組中加載特定名稱返回匹配的鍵值,匹配它它的圖像,

該陣列如下使用print_r($ inventory); //雖然它的很多較大,

Array 
(
    [NAME] => Array 
     (
      [0] => Abercrombie Ancient 
      [1] => Abercrombie Modern 
      [2] => Aberdeen Tartan Modern 
      [3] => Agnew Ancient 
      [4] => Allison Ancient 
      [5] => Anderson Ancient 
      [6] => Anderson Modern 
      [7] => Anderson Weathered 
      [8] => Angus Ancient 
      [9] => Angus Modern 
) 

    [IMAGE] => Array 
     (
      [0] => images/rare/abc_ar.jpg 
      [1] => images/rare/abc_mr.jpg 
      [2] => images/rare/abd_mr.jpg 
      [3] => images/rare/agw_ar.jpg 
      [4] => images/rare/all_ar.jpg 
      [5] => images/rare/and_ar.jpg 
      [6] => images/rare/and_mr.jpg 
      [7] => images/rare/and_wr.jpg 
      [8] => images/rare/ang_ar.jpg 
      [9] => images/rare/ang_mr.jpg 
    ) 
) 

我需要表明的是返回的名稱:和圖片,很像

<?php 
    echo $inventory['NAME'][8]; 
    echo $inventory['IMAGE'][8]; 
?> 

這被證明更加困難比我首先想到..

任何幫助球員都非常感謝..

馬蒂

//基本的HTML頁面

<!-- SEARCH FORM/LOADER--> 
<div id="searchbox"> 
<h3>FIND YOUR TARTAN <small>press enter to search.</small></h3> 
<form id="tartanSearch" action="select_tartan.php" method="get"> 
    <div class="search"> 
     <input type="text" size="70" class="inputbox" alt="Search" id="s" name="search" /> 
     <input value="Search" id="submit" type="submit" /> 
    </div> 
</form> 
</div> 
<div id="loader"><img src="images/indicator.gif" width="16" height="16" /></div> 

//當結果被加載(希望滑下動畫)

<!-- RESULTS --> 
<div id="tartanResults"> 
    <h3><!-- WERE THE NAME LOADS --></h3> 
    <div class="tartan_img"><!-- WERE THE IMAGE LOADS --></div> 
    <div class="tartan_text"> 
    <ul style="list-style:none;"> 
     <li>Description text here</li> 
     <li>With more text here aswell</li> 
     <li>We can have some here also</li> 
    </ul> 
    </div> 
</div> 
+0

嗨 首先,我看到ajax請求,但您似乎沒有對此請求結果做任何事情。你必須把它放在頁面上,就像在jQuery例子中一樣:類似於$('。result')。html(data); (你必須有.result元素)。 其次 - 你正在抓取整個頁面,這對於AJAX請求來說很少見。你不應該爲這個查詢做特別的動作/頁嗎? – 2010-03-18 12:10:18

+0

感謝Tomasz的回覆,好吧,我現在開始遇到麻煩了,你會推薦什麼?文本字段的值應該搜索數組並將名稱與其圖像匹配,然後該圖像應該存儲在變量中?另一個數組? 然後在結果div中顯示其適當的位置標記。 – Marty 2010-03-18 12:15:18

+0

感謝喬希,完全正確,生病5分鐘,並通過我的舊問題,並打勾是適當的。 – Marty 2010-03-18 13:39:45

回答

2

我敢肯定有很多是更多的答案給你的問題,但這是迄今爲止最簡單的一個:

  1. 僅爲輸出搜索結果創建新文件。當然,你應該分享加載CSV到數組的代碼,將它們包裝到函數中幷包含在這兩個文件中(主要的和新的)
  2. 你的主頁應該有結果(id =「tartanResults」)爲空的div爲空。
  3. 你的Ajax調用應該加載調用這個結果的div
  4. 您的新操作應返回的搜索結果(在當前DIV contants的一種形式)

這裏有一些代碼示例

結果DIV的新外觀主頁

<!-- RESULTS --> 
<div id="tartanResults"> 
</div> 

文件上機智h電站功能utility.php例如)

<?php 
function loadCSVContents($fileName) 
{ 
    $maxlinelength = 1000; 
    $fh = fopen($fileName, 'r'); 
    $firstline = fgetcsv($fh, $maxlinelength); 
    $cols = count($firstline); 

    $row = 0; 
    $inventory = array(); 

    while (($nextline = fgetcsv($fh, $maxlinelength)) !== FALSE) 
    { 
     for ($i = 0; $i < $cols; ++$i) 
      $inventory[$firstline[$i]][$row] = $nextline[$i]; 
     ++$row; 
    } 
    return $inventory; 
    fclose($fh); 
} 
?> 

文件與新的行動tartansearch.php例如)

<?php 

include('utility.php'); 
$inventory = loadCSVContents('tartans.csv'); 

$search = $_POST['search']; 
$resultName = ''; 
$resultImage = ''; 
if ($search) 
{ 
    $arr_key = array_search($search, $inventory['NAME']); 
    $resultName = $inventory['NAME'][$arr_key]; 
    $resultImage = $inventory['IMAGE'][$arr_key]; 
} 
?> 
<h3><?php echo $resultName?></h3> 
<div class="tartan_img"><img src="<?php echo $resultImage?>" /></div> 
<div class="tartan_text"> 
    <ul style="list-style:none;"> 
    <li>Description text here</li> 
    <li>With more text here aswell</li> 
    <li>We can have some here also</li> 
    </ul> 
</div> 

AJAX調用

$.ajax({ 
    url: '/tartansearch.php', // search page 
    beforeSend: function() { 
     $('#loader').show(); 
    }, 
    complete: function() { 
     $('#loader').hide(); 
     $('#tartanResults').show(); 
    }, 
    success: function(data) { 
     $('#tartanResults').html(data); 
    } 
}); 

這只是一個切入點。例如,您可能想要使用比array_search更復雜的函數來實際查找索引。你應該照顧錯誤報告。最基本的是,你不應該使用CSV文件,而是使用數據庫(如果可能的話)。

我不能保證我在這段代碼中沒有犯任何錯誤。但我認爲你會解決這些問題。

+0

非常感謝托馬斯,這是非常imformative,我不得不改變一些位和bobs,即:如果(搜索),如果($搜索) array_search($ name,$ inventory ['NAME']);到array_search($ search,$ inventory ['NAME']); 也將它從POST改爲GET,但是那真是太棒了,真的幫了我很多力氣。乾杯 – Marty 2010-03-18 14:29:12

+0

更正了這兩個地方的腳本:) POST或GET - 取決於您如何傳遞搜索參數。 很高興有幫助:) – 2010-03-18 14:35:30