PHP:根据输入字符串匹配的字段调整数组键中的值

3

我有点紧张,这是我在这里的第一个问题,但我已经非常努力地做了这件事,并需要一些帮助。

我制作了一个处理sketch,通过向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);
  }
}

我相信我已经构建了一个有效的2D数组,其中包含得分和条目字段。 我选择首先放置得分是为了利用关键字排序,并在需要时使用数组索引(在php中)。
请注意,我并不试图通过这个列表中的投票来改变索引,只改变分数。因此,结果应该如下:
在投票之前: 2157 Kittenz 2157 Dogz 11 Antelopez
在为Dogz投票后: 2157 Kittenz 2158 Dogz 11 Antelopez
所以,Kittenz始终是索引1,Dogz始终是索引2等等...(关键字排序会在后面提供一个排序后的数组)。
2个回答

2

调整投票计数的(过于复杂)部分使用了一个不存在的$rListV,然后将原始的$ListV放回文件中。


谢谢!一旦你看到它,这是一个明显的打字错误。代码仍然无法正常工作,所以我将检查传入的字符串信息 - 除此之外,代码看起来还好吗?(如果它很复杂,我会更好地理解!) - Helmut Applebaum

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);
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接