Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查数据库中的所有扩展_Php - Fatal编程技术网

Php 检查数据库中的所有扩展

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)) { 我

我有一个数据库,其列名为“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)) {
我知道我可以使用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如果这个或任何答案已经解决了你的问题,请考虑点击复选标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。如果你接受答案,人们会更有动力帮助你。