【问题标题】:Pass data and replace in Javascript / PHP在 Javascript / PHP 中传递数据和替换
【发布时间】:2012-07-26 04:05:49
【问题描述】:

假设我已经有近 2000 行这样的:

<div style="position:absolute;top:461;left:167"><nobr>1 001 A NAME HERE</nobr></div>
<div style="position:absolute;top:461;left:682"><nobr>TRUE</nobr></div>
<div style="position:absolute;top:480;left:167"><nobr>2 002 ANOTHER NAME GOES HERE</nobr></div>
<div style="position:absolute;top:480;left:682"><nobr>FALSE</nobr></div>

我想将它们自动传递到如下表中:

<tr>
    <td class="id">1</td>
    <td class="serial">001</td>
    <td class="name">A NAME HERE</td>
    <td class="accepted">TRUE</td>
</tr>
<tr>
    <td class="id">2</td>
    <td class="serial">002</td>
    <td class="name">ANOTHER NAME GOES HERE</td>
    <td class="accepted">FALSE</td>
</tr>

您能帮我了解如何使用 PHP/Javascript 做到这一点吗?

PS:定义的样式无关紧要,因为它在表格中会更容易。

【问题讨论】:

  • 告诉我们你的 2000 行是如何生成的?
  • @JBRTRND 我已经有了它们,在一个 HTML 文件中。有什么建议吗?
  • 所以,我认为你应该使用 Javascript/jQuery 来实现你想做的事情。(你没有办法将这些行存储在数据库中?)

标签: javascript php replace


【解决方案1】:

$string 是所有 div 的字符串。 假设换行符是 \r\n,将所有这些更改为正确的换行符

$sections = explode("\r\n", strip_tags($string));//Remove divs ad nobrs and sort into lines
$numSections = count($sections);
for($row = 0; $row < $numSections; $row += 2) {
    $rows[0] = explode(" ", $sections[$row]);
    $rows[1] = $sections[$row + 1];?>
<tr>
    <td class="id"><?php echo $rows[0][0]; ?></td>
    <td class="serial"><?php echo $rows[0][1]; ?></td>
    <td class="name"><?php for($i=2; $i<count($rows[0]); $i++) echo $rows[0][$i]+" "; ?></td>
    <td class="accepted"><?php echo $rows[1]; ?></td>
</tr>

<?php  }

假设您希望它回显

【讨论】:

  • 这是我需要的,但只有一个问题,你能再看看问题吗?没有换行,有人为了更“清晰”而编辑。
  • 啊,我明白了。给我一秒钟,我会为你解决这个问题。
  • 好的,谢谢。还有一点问题,在我的 $string 中,我不能用换行符添加那些行,或者是吗?因为它抛出Parse error: syntax error, unexpected '}' in ...
  • 如果是这种情况,那是我的代码有错误:P,试试这个,如果它再次出现,请评论错误!
  • 它抛出了错误:explode() 中的参数计数错误(带有 $sections 和 $rows[0] 的行),但我更正了语法并使用了explode 函数。现在我得到了这个&lt;tr&gt; &lt;td class="id"&gt;1&lt;/td&gt; &lt;td class="serial"&gt;001&lt;/td&gt; &lt;td class="name"&gt;002 003 004...&lt;/td&gt; &lt;td class="accepted"&gt;&lt;/td&gt; &lt;/tr&gt;
【解决方案2】:

lat 在 temp.html 中说出你当前的 html

获取一个php变量中的所有数据;

$data = file_get_contents('temp.html');
$data_filter = explode('<nobr>',$data);

$final_data  = array();
foreach($data_filter as $df1)
{
   $temp = explode('</nobr>',$df1);
   $final_data[] = $temp[0];
}
// now all your required data is in an array in sequences of two
$str = '';
while(count($final_data))
{
  $name  = array_pop($final_data);
  while(strlen($name)<5){
  $name  = array_pop($final_data);
  }
  $accepted = array_pop($final_data);
  $name = explode(' ',$name);
  $str.= '<tr>
    <td class="id">'.$name[0].'</td>
    <td class="serial">'.$name[1].'</td>
    <td class="name">'.$name[2].'</td>
    <td class="accepted">'.$accepted.'</td>
</tr>
';
}
echo $str;

【讨论】:

  • &lt;tr&gt; &lt;td class="id"&gt;TRUE&lt;/td&gt; &lt;td class="serial"&gt;&lt;/td&gt; &lt;td class="name"&gt;&lt;/td&gt; &lt;td class="accepted"&gt;1 001 A NAME HERE&lt;/td&gt; &lt;/tr&gt; 它没有正确解析数据。
  • 同样的事情,但我发现我看到了错误。第一行推送内容&lt;tr&gt; &lt;td class="id"&gt;&lt;div&lt;/td&gt; &lt;td class="serial"&gt;style="position:absolute;top:461;left:167"&gt;&lt;/td&gt; &lt;td class="name"&gt;&lt;/td&gt; &lt;td class="accepted"&gt;&lt;/td&gt; &lt;/tr&gt; 所以我觉得你需要解析样式。
【解决方案3】:

假设 $str 包含您的输入 DIV:

<?php
preg_match_all('#<nobr>(?P<id>\d)(\s)(?P<number>\d{3})(\s)(?P<name>.*)</nobr>#Ui', $str, $names, PREG_SET_ORDER);
preg_match_all('#<nobr>(?P<bool>TRUE|FALSE)</nobr>#Ui', $str, $bools, PREG_SET_ORDER);

foreach($names as $i=>$row){
    echo '<tr>
            <td class="id">'.$row['id'].'</td>
            <td class="serial">'.$row['number'].'</td>
            <td class="name">'.$row['name'].'</td>
            <td class="accepted">'.$bools[$i]['bool'].'</td>
           </tr>'. PHP_EOL;
}
?>

请注意,此代码不受行尾格式的影响,因为它使用正则表达式。

【讨论】:

  • 很抱歉,它抛出了......什么都没有。
【解决方案4】:

这是一个 javascript 版本。

    <script>
        var data = [];

        $('div').each(function(index) {
            data[index] = $(this).text();
        });

        var str = '';

        for (var i=0; i < data.length; i=i+2) {
            var temp = data[i].split(' ');
            var name = temp.slice(2).join(' ');
            str += '<tr>' +
                        '<td class="id">'+ temp[0] + '</td>' + 
                        '<td class="serial">' + temp[1] + '</td>' +
                        '<td class="name">' + name +'</td>' +
                        '<td class="accepted">' + data[i + 1] + '</td>' +
                    '</tr>';
            temp = [];
        }

        console.log(str);
    </script>

str 变量包含您的表格数据。只需将该数据添加到您的 html 页面。

【讨论】:

  • 它根本不工作,对不起,但数据是一样的,它也抛出了很多“未定义”的字符串。
  • 哇,对不起,伙计们!这工作刚刚好,这是最好的答案;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 2019-07-09
相关资源
最近更新 更多