2013-12-17 34 views
3

我有点紧张,这是我的第一个问题,但我在这方面很努力,可以使用一些帮助。PHP:为输入字符串匹配的字段调整数组键的值

我做了一个处理草图,通过向php脚本发送查询来访问,排序和保存csv列表。它获取已排序的列表并显示它们。 (我不想进入XML或SQL,直到后来)

现在我试图使它有可能对列表中的条目进行投票。

在我的代码片段下面,我有一个查询来处理通过发送字符串的条目投票。

我想检查从数组中的字段处理传递的条目字符串,并通过向其添加一票投票来调整分数。

下面的代码不会破坏我的其他运行代码,但也不会调整投票。 我怀疑有一些方法,我不能正确访问字符串值,不知道是否有人能告诉我....

$ListV[]='score'; 
$ListV[]='entry'; 

<Snip> 

if ($type == "voteUp") { 
    $Entry = $_GET['Entry']; 
    if(($handle = fopen("List.csv", 'r')) !== FALSE) { 
     set_time_limit(0); 
     while(($data = fgetcsv($handle,0,',')) !== FALSE) { 
      $ListV[$row]=$data; 
      $row++;      
     } 
     fclose ($handle); 

    $count = count($ListV); 
    for($i=0; $i<$count; $i++){ //foreach??? 
     if ($rListV[$i][1]==$Entry || strcmp($rListV[$i][1],$Entry)==0) { 
      $score =int($rListV[$i][0]); 
      $rListV[$i][0]=$score+1; 
     } 
    }   
    header('Content-Type: text/csv; charset=utf-8'); 
    header('Content-Disposition: attachment; filename=file.csv'); 

    $listVote = fopen("List.csv",'w'); 
    foreach ($ListV as $values) {fputcsv($listVote,$values);} 
    fclose($listVote); 
    } 
} 

我相信我已经构建了得分和输入字段一个可行的二维数组。 我把分数放在第一位的原因是我可以利用关键排序,并在需要时使用数组索引(例如它在php中)。

请注意,我不是试图改变与此列表中的投票指数,只是得分。 所以结果应该如下;

投票前:

2157 Kittenz

2157 DOGZ

11 Antelopez

为DOGZ表决后;

2157 Kittenz

2158 DOGZ

11 Antelopez

所以,Kittenz总是索引1,DOGZ总是索引2,依此类推.... (关键排序给出一个排序后的数组)

回答

0

做了它,我正在回答迟到。

由于在php中没有稳定的排序(没有额外的代码),我已经将表格的排序和显示与主csv列表分开。

以下是从处理中获取条目并对其进行投票的代码;

else if ($type == "voteUp") {   //vote up query 
    $eVote = $_GET['eVote'];   //get voted string 
    $vList = loadCSV('List.csv');  //load main csv List 
    $count = count($vList);   //string search and add to score 
    for($i=0; $i<$count; $i++){ 
    if ($vList[$i]['entry']==$eVote || strcmp($vList[$i]['entry'],$eVote)==0) { 
     $vList[$i]['score'] += 1; 
    } 
    saveCSV('List.csv',$vList);  //save new score to main csv List 
    } 
} 

和加载和保存CSV功能...

function loadCSV($file) 
{ 
    $handle = fopen($file, 'r'); 
    $header = fgetcsv($handle, 0, ","); 
    $data = array(); 
    while ($row = fgetcsv($handle, 0, ",")) { 
    $row_assoc = array(); 
    foreach ($row as $key => $field) { 
     $row_assoc[$header[$key]] = $field; 
    } 
    $data[] = $row_assoc; 
    } 
    fclose($handle); 
    return $data; 
} 
function saveCSV($file,$array) 
{ 
    $handle = fopen($file, 'w'); 
    $header = array("score","entry"); 
    fputcsv ($handle, $header, ","); 
    foreach($array as $row){ 
    fputcsv($handle, $row, ","); 
    } 
    fclose($handle); 
} 
2

(过于复杂)部分调整投票计数工作与不存在$rListV,然后你把原来的$ListV回到文件。

+0

谢谢!一旦你看到它,一个明显的错字。该代码仍然无法正常工作,所以我将检查字符串信息进来 - 否则代码看起来好吗? (如果它很复杂,我理解它更好!) –

+0

你能建议简化的代码,还是应该工作正常? –