如果你看看我的很多问题,你会发现有时我不会问最好的问题,或者我是如此匆忙,以至于我没有看到一直在我面前的答案。如果这是另外一个问题,请善待一些其他人不是最好的。现在问题。
过去一周左右,我一直在创建一个文件列表查看器类型的东西。在这一点上,它很棒,但我需要添加一个搜索功能。我是通过使用array_search()来实现的。唯一的问题是这个函数要求你输入文件的EXACT名称而不是它的一部分。
这是问题所在。我尝试了很多解决方案,坦率地说,我的PHP技能并不是最专业的。我已尝试过array_filters和带有strpos的循环。在这一点上没有任何作用。我的代码如下:
<?php
//error_reporting(0);
//ini_set('display_errors', 0);
//$dir = $_SERVER["DOCUMENT_ROOT"] . '/';
$dir = getcwd();
$files = $files = array_slice(scandir($dir), 2);
$number = count($files);
sort($files);
$images = array();
$an = count($images);
$query = $_GET['q'];
$searchimages = array();
$san = count($searchimages);
$r = array();
if ($query) {
for ($w = 0; $w <= $number; $w++){
$rnum = count($r);
if (strpos($files[$w], $query) !== false) {
$r[$rnum++] = $files[$w];
}
}
if ($r != null) {
if (substr($files[$r], -5) == ".jpeg" || substr($files[$r], -4) == ".png" || substr($files[$r], -4) == ".jpg" || substr($files[$r], -4) == ".gif") {
$searchimages[$san++] = $files[$r];
echo "<a href='#" . $files[$r] . "'>" . $files[$r] . "</a><br>";
} else {
echo "<a href='" . $files[$r] . "'>" . $files[$r] . "</a><br>";
}
for ($z = 0; $z <= $san; $z++)
echo "<a name='" . $searchimages[$z] . "'>" . "<a href='" . $searchimages[$z] . "' target='_blank'>" . "<img src='" . $searchimages[$z] . "'>" . "</img></a>";
} else {
echo "No results found. Please try a different search" . "<br>";
}
} else {
for ($x = 0; $x <= $number; $x++) {
if (substr($files[$x], -5) == ".jpeg" || substr($files[$x], -4) == ".png" || substr($files[$x], -4) == ".jpg" || substr($files[$x], -4) == ".gif") {
$images[$an++] = $files[$x];
echo "<a href='#" . $files[$x] . "'>" . $files[$x] . "</a><br>";
} else {
echo "<a href='" . $files[$x] . "'>" . $files[$x] . "</a><br>";
}
}
for ($y = 0; $y <= $an; $y++) {
echo "<a name='" . $images[$y] . "'>" . "<a href='" . $images[$y] . "' target='_blank'>" . "<img src='" . $images[$y] . "'>" . "</img></a>";
}
}
?>
目前有超过2,000个文件,它们中包含各种随机字符。这些字符包括破折号,感叹号,字母和数字以及句号等等。我无法控制这些文件名,它们必须保持完全相同。
如果查看代码,我首先获取所有文件名并将它们存储在一个数组中,
$files
然后我检查是否在网址中提供了搜索参数
?q=insert-search-terms-here
之后,如果它被提供,我将搜索它(这是问题所在)。如果没有提供,我只需从数组中获取文件名并检查它们是否是图像。如果是这样的话,我会以缩略图的形式将它们全部打印在页面底部,并在顶部创建一个页面链接链接,将您向下滚动到图像的位置。如果它不是图像,则会直接转到该文件。请注意,缩略图是指向实际图像的链接。
在搜索时应该发生的事情基本上是在它没有搜索的情况下会做什么,但它将自己限制为包含字符串“foobar”的文件。
当它搜索但没有找到任何内容时,会打印出它没有找到任何内容并且用户应该再次搜索。
如果有人可以提供帮助,我们将不胜感激。就像我刚开始说的那样,如果它是一个愚蠢的错误,请善待。
最诚挚的问候, 以马内利
修改: 这篇文章现在显然有一个答案,对于那些在Google上发现这篇文章的人或者你有什么,我希望你阅读答案帖子中的评论以及答案,因为他们提供了关键信息!!
答案 0 :(得分:0)
http://www.wordinn.com/solution/108/php-getting-part-string-after-and-given-sub-string-or-character 这可能会有所帮助..
function strafter($string, $substring) {
$pos = strpos($string, $substring);
if ($pos === false)
return $string;
else
return(substr($string, $pos+strlen($substring)));
}
答案 1 :(得分:0)
您可能想要使用preg_grep。替换这个:
for ($w = 0; $w <= $number; $w++){
$rnum = count($r);
if (strpos($files[$w], $query) !== false) {
$r[$rnum++] = $files[$w];
}
}
用这个:
$r = preg_grep('/\Q' . $query . '\E/', $files);
示例:
$files = array(
'foo.bar',
'barfoo.baz',
'baz.fez',
'quantum-physics.ftw',
);
$query = 'foo';
$r = preg_grep('/\Q' . $query . '\E/', $files);
print_r($r);
输出:
Array
(
[0] => foo.bar
[1] => barfoo.baz
)
下面的preg_match
可以读取“匹配任何以点结尾的字符串,后跟jpeg,png,jpg或gif”(美元符号可以翻译成“字符串的结尾”)。
if ($query) {
$r = preg_grep('/\Q' . $query . '\E/', $files);
if ($r != null) {
foreach($r as $filename) {
if (preg_match('/\.(jpeg|png|jpg|gif)$/', $filename)) {
// File is an image
echo "$filename is an image<br/>";
// Do stuff ...
} else {
// File is not an image
echo "$filename is NOT an image<br/>";
// Do stuff ...
}
}
// ... Do more
} else {
echo "No results found. Please try a different search" . "<br>";
}
}
答案 2 :(得分:0)
这样的东西甚至适用于关联数组。
foreach ($members as $user){
$Match = substr($user['column'][0], strpos($user['column'][0], "#") + 1);
$final_Array[$i]=$Match;
$i++;
}
print_r($final_Array)