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


PHP: adjust value in array key for a field matched by an input string

我有点紧张,这是我在这里的第一个问题,但我在这方面做得很努力,需要一些帮助。

我制作了一个处理草图,通过向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羚羊

投票支持Dogz之后

2157 Kittenz

2158 Dogz

11羚羊

所以,Kittenz总是索引1,Dogz总是索引2,依此类推。。。。(键排序稍后会给出一个排序的数组)

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

做到了,我的回答姗姗来迟。

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