我正在构建一个票务系统,但我不想把其中一个消息
********************************************************************************************************************************************************* **
Gmail倾向于使用“引用文字”做出相当不错的主意.有没有人知道任何预制的脚本或方法很容易做到这一点?我正在尝试将他们的回复传回我们的系统.
谢谢,
黑色的小乳牛
我认为你需要像我的全数组diff功能:
/** Full Array Diff implemented in pure PHP,written from scratch. Copyright (C) 2011 Andres Morales <yo@kijote.com.ar> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License,or (at your option) any later version. This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not,write to the Free Software Foundation,Inc.,59 Temple Place - Suite 330,Boston,MA 02111-1307,USA. http://www.gnu.org/licenses/gpl.html About: I needed a function to compare a email and its response but array_diff() does not cover my expectations. So I reimplement a full array diff function. You can use it directly in your code and adopt to your needs. Contact: yo@kijote.com.ar <Andres Morales> **/ function farray_diff($array1,$array2){ $out = array(); $max_arr = count($array1) > count($array2)? count($array1) : count($array2); $i = 0; $j = 0; while($i < $max_arr && $j< $max_arr){ if($array1[$i] == $array2[$j]){ array_push($out,$array1[$i]); } else { if(in_array($array1[$i],array_slice($array2,$j))){ for($k = $j; $k<$max_arr; $k++){ if($array1[$i]==$array2[$k]){ array_push($out,$array2[$k]); $j = $k; break; } else{ array_push($out,array('o' => '','n' => $array2[$k])); } } } elseif(in_array($array2[$j],array_slice($array1,$i))){ for($k = $i; $k<$max_arr; $k++){ if($array2[$j]==$array1[$k]){ array_push($out,$array1[$k]); $i = $k; break; } else { array_push($out,array('o' => $array1[$k],'n' => '')); } } } else{ if(!empty($array1[$i])) array_push($out,array('o' => $array1[$i],'n' => $array2[$j])); else array_push($out,'n' => $array2[$j])); } } $i++; $j++; } return $out; }
因此,您可以像在以下示例中一样使用它:
$str1 = "This is a simple text that can you reply,so can you do it?"; $str2 = "I response in your text: This is a simple text (no so simple) that can be replied,so can you do it? Yes,I can!"; // Printing the full array diff of single space exploded strings print_r(farray_diff(explode(' ',$str1),explode(' ',$str2)));
返回:
Array ( [0] => Array ( [o] => [n] => I ) [1] => Array ( [o] => [n] => response ) [2] => Array ( [o] => [n] => in ) [3] => Array ( [o] => [n] => your ) [4] => Array ( [o] => [n] => text: ) [5] => This [6] => is [7] => a [8] => simple [9] => text [10] => Array ( [o] => [n] => (no ) [11] => Array ( [o] => [n] => so ) [12] => Array ( [o] => [n] => simple) ) [13] => that [14] => can [15] => Array ( [o] => [n] => be ) [16] => Array ( [o] => [n] => replied,) [17] => Array ( [o] => [n] => so ) [18] => Array ( [o] => [n] => can ) [19] => you [20] => Array ( [o] => reply,[n] => ) [21] => Array ( [o] => so [n] => ) [22] => Array ( [o] => can [n] => ) [23] => Array ( [o] => you [n] => ) [24] => do [25] => it? [26] => Array ( [o] => [n] => Yes,) [27] => Array ( [o] => [n] => I ) [28] => Array ( [o] => [n] => can! )
它就像一个简单的差异,但是没有“”和“ – ”,在用“o”(对于旧)和“n”(对于新的)数组键进行简单解析之后,它们都已被替换.并且您可以使用以下函数来解析结果:
function format_response($diff_arr){ $new = false; echo '<span class="old">'; foreach($diff_arr as $item) { $content = ''; if (!is_array($item)){ $new = false; $content = $item; } else if (empty($item['o']) && !empty($item['n'])){ $new = true; $content = $item['n']; } if($old_new != $new){ if($new) echo '</span><span class="new">'; else echo '</span><span class="old">'; } echo $content . (!empty($content)?' ':''); $old_new = $new; } echo '</span>'; }
因此,您可以使用以下方法解析数组,而不是使用简单的“print_r”:
format_response(farray_diff(explode(' ',$str2)));
并且您获得(在示例后)这样的事情:
<span class="old"></span><span class="new">I response in your text: </span><span class="old">This is a simple text </span><span class="new">(no so simple) </span><span class="old">that can </span><span class="new">be replied,so can </span><span class="old">you do it? </span><span class="new">Yes,I can! </span>
显然,为了正确显示你之前需要定义css“old”和“new”类的结果,有一些不同,pex:不同的前景色:
<style>.old{color: #808080;}.new{color:#000000}</style>
对于HTML电子邮件,或者您可以修改format_response函数以显示no-html电子邮件.
注意:您可以看到我的功能是免费软件,并且符合GNU通用公共许可证.
希望它能帮到你.