Php 检查数据库中的所有扩展
我有一个数据库,其列名为“document\u name”。该列中有数千行文档名,如:Php 检查数据库中的所有扩展,php,Php,我有一个数据库,其列名为“document\u name”。该列中有数千行文档名,如: kfhidfs.doc kjfdjdf.png dsdiusd.exe etc. etc. 我想知道我的用户过去上传了哪些扩展。 因此,我选择所有行: $sql = "SELECT document_name FROM docs"; $query = mysql_query($sql); while($fetch_doc = mysql_fetch_assoc($query)) { 我
kfhidfs.doc
kjfdjdf.png
dsdiusd.exe
etc.
etc.
我想知道我的用户过去上传了哪些扩展。
因此,我选择所有行:
$sql = "SELECT document_name FROM docs";
$query = mysql_query($sql);
while($fetch_doc = mysql_fetch_assoc($query)) {
我知道我可以使用EXPLODE拆分名称和扩展名,如:
// Example 1
$doc = $fetch_doc['document_name'];
$piece = explode(".", $doc);
echo $piece[0]; // document name
echo $piece[1]; // extension
但我只想看到每个扩展最多1次,因为我想知道数据库中有哪些扩展,我不想知道有多少
但是我如何安排呢?只有当它们还不存在时,才将它们添加到数组中:
$extensions = array();
while($fetch_doc = mysql_fetch_assoc($query)) {
$doc = $fetch_doc['document_name'];
$piece = explode(".", $doc);
$extension = $piece[1];
if (!in_array($extension, $extensions) {
$extensions[] = $extension;
}
}
// Here $extensions is an array of the different extensions, each present only once
仅当它们不在阵列中时,才将它们添加到阵列中:
$extensions = array();
while($fetch_doc = mysql_fetch_assoc($query)) {
$doc = $fetch_doc['document_name'];
$piece = explode(".", $doc);
$extension = $piece[1];
if (!in_array($extension, $extensions) {
$extensions[] = $extension;
}
}
// Here $extensions is an array of the different extensions, each present only once
您可以使用SQL来实现这一点,这很可能比PHP更强大 使用
子字符串索引
和分组依据
:
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(document_name,',',-2),',',1) AS extension
FROM docs
GROUP BY extension
这假定在文件扩展名之前只有一个
您可以将该查询与PHP一起使用,如下所示:
$sql = "SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(document_name,',',-2),',',1) AS extension FROM docs GROUP BY extension";
$query = mysql_query($sql);
while($extension = mysql_fetch_assoc($query)) {
var_dump($extension);
}
$extensions = array();
while($fetch_doc = mysql_fetch_assoc($query)) {
$doc = $fetch_doc['document_name'];
$piece = explode(".", $doc);
$extensions[$piece[1]] = true;
}
foreach($extensions AS $key=>$value) {
echo $key . "<br />";
}
顺便说一句:
从PHP5.5.0开始,就不推荐使用原始的mysql扩展,不建议编写新代码,因为它将在将来被删除。相反,应该使用mysqli或PDO_MySQL扩展。在选择MySQL API时,请参阅MySQL API概述以获取更多帮助
您可以使用SQL来实现这一点,这很可能比PHP更强大 使用
子字符串索引
和分组依据
:
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(document_name,',',-2),',',1) AS extension
FROM docs
GROUP BY extension
这假定在文件扩展名之前只有一个
您可以将该查询与PHP一起使用,如下所示:
$sql = "SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(document_name,',',-2),',',1) AS extension FROM docs GROUP BY extension";
$query = mysql_query($sql);
while($extension = mysql_fetch_assoc($query)) {
var_dump($extension);
}
$extensions = array();
while($fetch_doc = mysql_fetch_assoc($query)) {
$doc = $fetch_doc['document_name'];
$piece = explode(".", $doc);
$extensions[$piece[1]] = true;
}
foreach($extensions AS $key=>$value) {
echo $key . "<br />";
}
顺便说一句:
从PHP5.5.0开始,就不推荐使用原始的mysql扩展,不建议编写新代码,因为它将在将来被删除。相反,应该使用mysqli或PDO_MySQL扩展。在选择MySQL API时,请参阅MySQL API概述以获取更多帮助
您可以这样做:
$sql = "SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(document_name,',',-2),',',1) AS extension FROM docs GROUP BY extension";
$query = mysql_query($sql);
while($extension = mysql_fetch_assoc($query)) {
var_dump($extension);
}
$extensions = array();
while($fetch_doc = mysql_fetch_assoc($query)) {
$doc = $fetch_doc['document_name'];
$piece = explode(".", $doc);
$extensions[$piece[1]] = true;
}
foreach($extensions AS $key=>$value) {
echo $key . "<br />";
}
$extensions=array();
while($fetch\u doc=mysql\u fetch\u assoc($query)){
$doc=$fetch_doc['document_name'];
$piece=分解(“.”,$doc);
$extensions[$piece[1]]=true;
}
foreach($key=>$value作为扩展名){
echo$key.“
”;
}
通过这种方式,您可以将每个扩展添加到一个数组中(一个键只能存在一次,因此每个扩展只能自动存在一次)。此后,您将回显数组的内容。您可以执行以下操作:
$sql = "SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(document_name,',',-2),',',1) AS extension FROM docs GROUP BY extension";
$query = mysql_query($sql);
while($extension = mysql_fetch_assoc($query)) {
var_dump($extension);
}
$extensions = array();
while($fetch_doc = mysql_fetch_assoc($query)) {
$doc = $fetch_doc['document_name'];
$piece = explode(".", $doc);
$extensions[$piece[1]] = true;
}
foreach($extensions AS $key=>$value) {
echo $key . "<br />";
}
$extensions=array();
while($fetch\u doc=mysql\u fetch\u assoc($query)){
$doc=$fetch_doc['document_name'];
$piece=分解(“.”,$doc);
$extensions[$piece[1]]=true;
}
foreach($key=>$value作为扩展名){
echo$key.“
”;
}
通过这种方式,您可以将每个扩展添加到一个数组中(一个键只能存在一次,因此每个扩展只能自动存在一次)。此后,您将回显数组的内容。当我使用此数组时,我得到的列表中只显示:数组我做错了什么?@user3303790没什么,我的示例中有错误。替换
echo$扩展名代码>带有变量转储($extension)代码>然后您将看到数组内容。(如果你不能回应一个数组)@ USS330390如果这个或任何答案已经解决了你的问题,请考虑点击复选标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。如果你接受答案,人们会更积极地帮助你。当我使用这个答案时,我会得到一个列表,上面只写着:数组我做错了什么?@user3303790没什么,我的例子有错误。替换echo$扩展名代码>带有变量转储($extension)代码>然后您将看到数组内容。(如果你不能回应一个数组)@ USS330390如果这个或任何答案已经解决了你的问题,请考虑点击复选标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。如果你接受答案,人们会更有动力帮助你。