在echo

时间:2017-10-25 15:52:26

标签: php mysql arrays

我得到了以下代码,但目前它生成了一系列结果,但大约有40多个空格。

$user_  = JFactory::getUser();
$db     = JFactory::getDBO();
$levels = JAccess::getAuthorisedViewLevels($user->id);
foreach($levels as $key => $level)
{
  $query  = 'SELECT title FROM #__pf_projects';
  $query .= ' WHERE access = ' . $level . " AND TRIM(title) != ''";
  $db->setQuery($query);
  $projectlist = $db->loadResult($query).'<br>';
  echo $projectlist;
}

起初我认为array_filter()在这里会很好,但是PatrickQ指出它是一个字符串,所以阵列过滤器不会起作用。 然后我根据Don's Panic的答案调整了代码。这个改编的代码就是你在上面看到的。

现在返回一个这样的列表。

<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
http://www.domain1.com
<br>
<br>
<br>
<br>
http://www.domain5.com
http://www.domain23.com
http://www.domain65.com
http://www.domain213.com
<br>
<br>
<br>
<br>
<br>
<br>

那么如何调整代码以获得这样的列表:

http://www.domain1.com
http://www.domain5.com
http://www.domain23.com
http://www.domain65.com
http://www.domain213.com

当您将<br>更改为,时,列表会变为,,,,,,,,,,,http,,,,,,httphttphttphttp,,,,,,,&lt; =我把它写得更短了。

3 个答案:

答案 0 :(得分:2)

如果array_filter没有过滤掉空值,那么它们可能并非真空。假设那里有某种空格而不是空字符串或空字符串,你可以修改你的查询来修剪标题,只返回那里仍有东西的结果。

SELECT title FROM #__pf_projects
WHERE access = ? AND title IS NOT NULL AND TRIM (title) != ''

或者,就原始PHP代码而言:

$query  = 'SELECT title FROM #__pf_projects';
$query .= ' WHERE access = ' . $level . " AND TITLE IS NOT NULL AND TRIM(title) != ''";

尽管如此,最好避免将变量连接到SQL中。如果您使用的框架有某种方式来使用预准备语句,那么您应该改为使用该路径。

如果这仍然不起作用,我真的不知道还有什么可以尝试查询,但你应该能够只检查PHP中的空结果,只有在那里&#39时回显;展示的东西。

$projectlist = $db->loadResult($query);
if (trim($projectlist)) echo $projectlist.'<br>';

答案 1 :(得分:2)

首先,array_filter,如果没有传递回调,将只删除falsy元素。具有空格的字符串被评估为true,因此不会从数组中删除。你可以这样做:

$filteredArray = array_filter($projectList, function($val) {
    return trim($val);
});

print_r($filteredArray);

此外,您无法回显数组。您可以使用print_r或var_dump。

答案 2 :(得分:0)

感谢大家的回答,我终于找到了获得结果的方法。我的方式不一定适合每个人。而在这方面我有更多知识的人可能会做不同的事情。

基本上我的答案是在div中输出每个结果的整个字符串。这将创建许多空div,但这些不是由HTML生成的。然而,它们会出现在检查员中。

我在脚本中使用的最终代码。

$user_  = JFactory::getUser();
$db     = JFactory::getDBO();
$levels = JAccess::getAuthorisedViewLevels($user->id);
foreach($levels as $key => $level)
{
  $query  = 'SELECT title FROM #__pf_projects';
  $query .= ' WHERE access = ' . $level;
  $db->setQuery($query);
  $projectlist = '<div class="project">'.$db->loadResult($query).'</div>';
  echo $projectlist;
}

现在给我一个这样的列表:

http://www.domain1.com
http://www.domain5.com
http://www.domain23.com
http://www.domain65.com
http://www.domain213.com