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

时间:2013-12-17 12:01:53

标签: php arrays

我有点紧张,这是我在这里的第一个问题,但我在这方面做得非常努力,可以使用一些帮助。

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

答案 0 :(得分:2)

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

答案 1 :(得分: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);
 }