php
  • loops
  • while-loop
  • 2010-11-02 30 views 1 likes 
    1

    我使用下面的函数转换csv文件为xml:检查是否值在while循环相同

    我要重复同样的动作,如果$结果[$行]值是一样的前一次它穿过。我怎样才能做到这一点?

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
        $num = count($data); 
        $records[] = $data; 
    
        $stringData .= '<PayTo PTPayeeID="' . $records[$row][2]; 
    
        // if the value of $records[$row][2] is the same I want to repeat an action. 
        echo "<div id=\"row\"><div id=\"num\">" .$row. "</div>"; 
        $row++; 
    
        for ($c=0; $c < $num; $c++) { 
        if ($c != 1) { 
         echo "<div class=\"field\">" . $data[$c] . "</div>"; 
        } 
        } 
    } 
    
    +0

    使用单引号和连接,或双引号和变量插值。事情将会更加清洁:“

    ' . $row . '
    ”或“
    $row
    ”。 – meagar 2010-11-02 20:42:50

    回答

    6

    一般来说,比较一排前一个将前一行的值存储在一个变量中。 确保为变量赋值的值不会作为数据中的实际值出现。

    $prevValue = NULL; 
    while(condition) { 
    if ($curValue == $prevValue) { 
        . 
        . do stuff 
        . 
    } 
    $prevValue = $curValue; 
    } 
    
    0
    if (count($records)>1&&$records[count($records)-1]===$records[count($records)-2]) { 
        //do something 
    } 
    
    +0

    这可能会导致索引超出界限错误。 – dotariel 2010-11-02 20:45:18

    +0

    更改我的答案,谢谢XSaint32 – thejh 2010-11-02 20:50:49

    3

    while循环之前做:

    $prevRow2 = ''; 
    

    然后你就可以比较:

    if ($records[$row][2] == $prevRow2) { 
        // it's the same as the last time! 
    } 
    

    使用$records[$row][2]后,只需将它复制到$prevRow2继续while循环之前。

    (如果这是可能的,$records[$row][2]可以是一个空字符串,你不希望它匹配第一次迭代中,创建一个$firstTime布尔检查这一点。)

    +0

    谢谢这是非常有用的 - 但它仍然不是我需要它的方式。我需要它打印当前记录$ records [$ row] [2]一次,然后如果下一次循环通过它的相同,那么它应该重复该动作相同的动作。 – MG1 2010-11-02 21:41:09

    +0

    @ MG1:我只是向你展示如何检测*如果它与上次相同。 “行动”是什么意思? – webbiedave 2010-11-02 21:47:17

    +0

    下面是一个例子:while(($ data = fgetcsv($ handle,1000,“,”))!== FALSE){num_count = count($ data); $ records [] = $ data; \t $ stringData。='打印一次'; if($ records [$ row] [2] == $ prevRow2){ $ stringData。='使用$ records [$ row] [2]'内的新数据继续重新打印。 \t} $ prevRow2 = $ records [$ row] [2]; \t $ row ++; ($ c = 0; $ c <$ num; $ C++){ if($ c!= 1){ echo $ data [$ c]; } \t } } \t $ stringData。=''; fclose($ handle); } – MG1 2010-11-02 22:01:35

    相关问题