【问题标题】:PHP function - custom string length functionPHP函数-自定义字符串长度函数
【发布时间】:2011-05-17 15:48:40
【问题描述】:

在 php 中,什么是仅显示长度大于 50 个字符的字符串的函数,将其截断为不显示超过 130 个字符并将其限制为一个结果?

例如,假设我在结果集中有 30 行,但我只想显示具有这些参数的最新行。如果最新行有 25 个字符,则不应显示。它应该只显示字符串长度为 50 或更多字符的最新字符串。

【问题讨论】:

  • 您已经向我们提供了参数,但您忘记说明您是如何获取数据的。
  • 正如 Ignactio 指出的那样,我们需要知道您的数据来自哪里。如果它来自数据库,您应该在查询中完成所有这些操作,而不是在 PHP 中。
  • 它来自数据库。我只想显示一个结果,并且一个结果的字符串长度只能超过 50。问题是因为我没有在 mysql 查询中将限制设置为 1,它会显示所有结果。我应该创建一个 if 语句来只显示包含 50 个或更多字符的字符串长度的行吗?

标签: php function string-length


【解决方案1】:

使用 SQL 查询。为了在 auto_increment 主键(我称之为 id)或创建行的日期/时间(例如 time_created)上找到您想要的最大值。

所以我假设表有:id (int), stringVal (string, char(), varchar(), 不管什么)

SELECT MAX(id),  SUBSTRING(stringVal, 1, 130)
FROM yourTable
WHERE LENGTH(stringVal) > 30

如果需要,请将 id 替换为时间字段。如果没有其中一个,您将很难找到最新的,但您总是可以任意选择一行。

--编辑-- 在 PHP 中使用 mysql 函数运行上述查询并获取所需输出的示例

$sql = "SELECT MAX(id),  SUBSTRING(stringVal, 1, 130) FROM yourTable WHERE LENGTH(stringVal) > 30";
$r = mysql_query($sql, $conn); //im hoping $conn or something like it is already set up
$row = mysql_fetch_assoc($r);
$desiredString = $row['stringVal'];

【讨论】:

  • 看起来字符串位置以 1 开头,很奇怪。这是字符串函数,如果您想自己寻找dev.mysql.com/doc/refman/5.0/en/…
  • 当我在 phpmyadmin 中测试时,查询似乎有效,但我的脚本中没有输出。
  • 确保你正确地形成了字符串,如果你必须把它去掉。然后确保您正确调用您的 mysql 函数(mysql 或 mysqli)在一个简短的示例中进行错误编辑
【解决方案2】:

这样的事情应该只是确保您首先按最新项目获取数据排序。 break 语句将确保在找到与您的条件匹配的第一个结果后终止循环...

foreach($array_returned_from_query as $row)
{
    if(strlen($row) > 50)
    {
        echo substr($row, 0, 130);
        break;
    }
}

【讨论】:

  • 这是一个很好的本地解决方案,但他是从数据库中获取的,所以最好在查询中处理。直到几个厘米他才那么清楚,所以这不是你的错
  • 如果你得到一个无效的 foreach 参数,那么你一定传递了一个空数组。如果要使用循环,只需在循环之前检查以确保数组不为空。听起来@jon_darkstar 发布的查询对您来说是一个更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多