【问题标题】:Echo only results that match exact string (PHP)仅回显与精确字符串匹配的结果 (PHP)
【发布时间】:2015-12-17 11:48:09
【问题描述】:

我正在回显 WP 数据库插件的结果,并且我已设法将所需的所有结果缩小到一个帖子 ID,它现在显示与该帖子 ID 相关的所有 url 记录。 (向下滚动此链接以查看结果:http://universitycompare.com/analytics-test/

这是我用来回显 SQL 数据库记录的内容:

  <?php
echo "<strong>Stack Overflow Results</strong>";
echo "<br><div style='float:left; width:100%; padding:1em; background:#FFF; margin:2em 0;'>";
$lastDate = date('Y-m-d', strtotime('today - 30 days'));
$todayDate = date('Y-m-d');

$results = $wpdb->get_results( "SELECT * FROM `wp_statistics_pages` WHERE id=37 AND `date` BETWEEN '$lastDate' AND '$todayDate' ", ARRAY_A );
for($i=0;$i<count($results);$i++)
{
    echo "<span id='data-point'style='float:left;clear:left;' value='";
    echo $results[$i]['count'];
    echo "'>";
    echo get_site_url().''.$results[$i]['uri'].' (';
    echo $results[$i]['count'].')</span>';
} ?>

我有许多与 URL 相关但不具体的结果被回显(请参阅下面的回显示例)。我想做的只是回显与此 URL 匹配的结果:http://universitycompare.com/universities/anglia-ruskin-uni/

universitycompare.com/universities/anglia-ruskin-uni/ (103) universitycompare.com/universities/anglia-ruskin-uni?offset=10 (1) universitycompare.com/universities/anglia-ruskin-uni/?offset =10 (1) universitycompare.com/universities/anglia-ruskin-uni (1)

以上是一个示例,我不想回显任何与所选 URL 不完全匹配的结果。理想情况下,只有应该显示的记录应该是旁边带有 (103) 的结果。我不知道最好的方法。

我看过一个正则表达式,但有点不确定?这是我需要使用的东西吗?

编辑,(回答上述问题,用户分数太低无法回答自己的问题):

      <?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);

function startsWith($haystack, $needle) {
    // search backwards starting from haystack length characters from the end
    return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== FALSE;
}

function endsWith($haystack, $needle) {
    // search forward starting from end minus needle length characters
    return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== FALSE);
}

echo "<strong>Stack Overflow Results</strong>";
echo "<br><div style='float:left; width:100%; padding:1em; background:#FFF; margin:2em 0;'>";
$lastDate = date('Y-m-d', strtotime('today - 30 days'));
$todayDate = date('Y-m-d');

$results = $wpdb->get_results( "SELECT * FROM `wp_statistics_pages` WHERE id=37 AND `date` BETWEEN '$lastDate' AND '$todayDate' ", ARRAY_A );
for($i=0;$i<count($results);$i++)
if (endsWith(get_site_url().''.$results[$i]['uri'], 'http://universitycompare.com/universities/anglia-ruskin-uni/'))

{
    echo "<span id='data-point'style='float:left;clear:left;' value='";
    echo $results[$i]['count'];
    echo "'>";
    echo get_site_url().''.$results[$i]['uri'].' (';
    echo $results[$i]['count'].')</span>';
}


?>

【问题讨论】:

  • 感谢@Ahmed 的 EndsWith,我已经找到了答案,通过将 EndsWith 作为整个 URL 运行,我只能显示完整的 URL。答案现在在问题中。

标签: php mysql regex wordpress startswith


【解决方案1】:

您可能正在寻找startsWith()。请尝试以下操作:

if (startsWith($results[$i]['count'], 'universitycompare.com/universities/anglia-ruskin-uni'))
{
    echo "<span id='data-point'style='float:left;clear:left;' value='";
    echo $results[$i]['count'];
    echo "'>";
    echo get_site_url().''.$results[$i]['uri'].' (';
    echo $results[$i]['count'].')</span>';
}

startsWith() 和 endsWith() 的实现可以在这里找到startswith-and-endswith-functions-in-php

function startsWith($haystack, $needle) {
    // search backwards starting from haystack length characters from the end
    return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== FALSE;
}
function endsWith($haystack, $needle) {
    // search forward starting from end minus needle length characters
    return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== FALSE);
}

【讨论】:

  • 嘿@Ahmed,不太清楚如何直接实现它。 startsWith() 没有工作。我收到此错误:致命错误:调用未定义函数startsWith()
  • @OO'Neill,startsWith() 是一个用户定义的函数。您需要先定义它,然后才能在 if 语句中调用它。将函数定义复制到同一脚本中,然后重试。看看w3schools.com/php/php_functions.asp
  • 嗨@Ahmed,现在它回显没有结果,但没有错误?我需要编辑函数吗?
  • 您是否尝试匹配“h ttp://universitycompare.com/universities/anglia-ruskin-uni/”或“universitycompare.com/universities/anglia-ruskin-uni/”?注意前面的 http://。如果需要匹配第一个,则需要将 if 语句改为 if (startsWith($results[$i]['count'], 'h ttp://universitycompare.com/universities/anglia-ruskin-uni' ))
  • 是的,我已经做到了,我已经做到了以上所有 - 仍然没有运气? ://
猜你喜欢
  • 2021-10-18
  • 1970-01-01
  • 2022-11-26
  • 2011-08-07
相关资源
最近更新 更多