【问题标题】:store info and pull out in array存储信息并拉出数组
【发布时间】:2016-06-11 04:04:38
【问题描述】:

我有一个数据库,其中包含一行“流派”,其中包含电影的所有类型的流派,由空格分隔,例如这样的示例

Animation Comedy Horror

它们都是不同的类型,因此需要从数据库中提取它们并根据它们的类型放入一个数组中 我最初开始编写此代码:

<?
sql = "SELECT moviename,genre FROM movieHosting";
$query = mysql_query($sql);
$row = mysql_fetch_object($query);
?>

但不久之后我很快意识到,如果我这样做的话,每种类型都需要单独放入数组中

$genreArray = array($row->genre);

但这不会起作用,它会生成一个类似的数组

$genreArray = array("Animation Comedy Horror");

但是需要生成

$genreArray = array("Animation","Comedy","Horror");

【问题讨论】:

标签: php sql


【解决方案1】:

您是否尝试过使用explode 函数?

类似:

$genreArray = explode(" ", $row->genre);

【讨论】:

  • 我会推荐这个而不是 preg_split 函数。更干净,更容易查看和更快。另一方面,为什么不通过一对多关系对数据库进行一些规范化以提高效率?
  • 停止使用 mysql_* !改用 mysqli_* !!
  • @Simon 的意思是您不应该将多条数据存储为一个字段。每种类型都有自己的数据。如果电影可以有多种流派,您应该将流派移到具有以下字段的单独表中:idmovie_idgenre_name 或类似字段。
  • 然后,不必在 PHP 中进行文本处理,您只需向数据库询问例如('SELECT genre_name FROM genres WHERE movie_id = ?', $movie_id)。从长远来看,这还有其他好处,例如,让您可以非常轻松地找到 Horror 类型的所有电影。
【解决方案2】:

这里更接近你的逻辑。

$string = 'Animation Comedy Horror';
    $genra = explode(" ", $string);
    print_r($genra); //Array ( [0] => Animation [1] => Comedy [2] => Horror )

    echo $genra[0]; //Animation

    echo '<hr>'; // OR

    foreach($genra as $value){
        echo $value . '<br>';
    }

// Output
Animation
Comedy
Horror

希望我们的回答能为您的问题带来更多澄清。

【讨论】:

  • 我真的很喜欢这个 :) 给出了一个很好的例子来说明可以做什么但是有人已经给了我我需要的答案,所以我只能给你一个赞成票 :)跨度>
  • 感谢您认可我的回答@Joseph Flames 我同意 JamesBlond 有最好和最简单的答案。 ^_^
  • 我赞成,因为你的答案是正确的并且是一个如此狂热的人:)
  • 谢谢@HalayemAnis ^_^
【解决方案3】:

了解这些并相应地使用。

<?php
    $str = "Animation Comedy Horror";
    $str_arr = explode(' ', $str);
    print_r($str_arr);
    $str_arr = split(' +', $str);
    print_r($str_arr);
    $str_arr = preg_split('/ +/', $str);
    print_r($str_arr);
?>

检查这个:https://eval.in/532527

也了解一下,

爆炸http://php.net/manual/en/function.explode.php

预分割http://php.net/manual/en/function.preg-split.php

拆分http://php.net/manual/en/function.split.php

split 现已弃用。

【讨论】:

    【解决方案4】:
       $result = preg_split("/[\s,]+/", "Animation Comedy Horror");
        print_r($result );
        print_r(implode(",",$result));
    

    输出

     Array ( [0] => Animation [1] => Comedy [2] => Horror ) 
    
     Animation,Comedy,Horror
    

    【讨论】:

      【解决方案5】:

      警告
      停止使用 mysql_* 函数,原因有很多:完全删除,正式弃用,...对于详尽的列表,您可以阅读此线程Why shouldn't I use mysql_* functions in PHP?,而不是使用mysqli_*PDO

      我认为像你这样存储流派是一个非常糟糕的设计
      您将如何更新数据?
      如何按类型检索电影?

      每个简单的 SQL 操作都将是一场噩梦,与其花时间更正你的设计,例如你可以简单地从流派创建一个专用表

      ID | type
      ------------
      1  | Comedy
      2  | Horror
      3  | Mangas
      4  | ... 
      5  | Animation
      

      并创建一个实体表,将电影与 [1, N] 流派相关联

      MovieId | GenreId
      -----------------
      2       | 1
      2       | 2
      2       | 5
      

      【讨论】:

        【解决方案6】:

        尝试使用 PHP 的 explode() 函数。此函数需要 2 个参数、一个分隔符和一个字符串。分隔符应该是您要在字符串中查找以分隔项目的内容。在实践中,这看起来像:

        $genreArray = explode(' ', $row->genre);
        

        现在$genreArray 看起来像这样(从var_dump($genreArray) 生成的输出):

        array(3) { [0]=> string(9) "Animation" [1]=> string(6) "Comedy" [2]=> string(6) "Horror" }
        

        【讨论】:

          【解决方案7】:

          试试这个

          1. 通过多个数组:

            <?
            $sql = "SELECT moviename,genre FROM movieHosting";
            $query = mysql_query($sql);
            $row = mysql_fetch_array($query);
            /* fetched value */
            $moviename = $row['moviename'];
            $genre= $row['genre'];
            ?>
            
          2. 通过单个数组产生类似$genreArray = array("Animation","Comedy","Horror");的结果

            <?
            $sql = "SELECT moviename,genre FROM movieHosting";
            $query = mysql_query($sql);
            $row = mysql_fetch_array($query);
            /* fetched value */
            $array =array();
            foreach($row as $r){
                $moviename = $r['moviename'];
                $genre = $r['genre'];
                $array_push = array_push($array,$moviename,$genre);
                print_r($array_push);
            }
            ?>
            

          【讨论】:

            【解决方案8】:
            $genreArray = preg_split("/[\s,]+/", "Animation Comedy Horror");
            print_r($genreArray );
            

            输出:

            Array
            (
                [0] => Animation
                [1] => Comedy
                [2] => Horror
            )
            

            【讨论】:

            • 看看我需要什么快速问题这在语法中是否有效
            • $genreArray = preg_split("/[\s,]+/", $row->genre);它会在 $genreArray 中实际存储一个数组吗
            • 是的,它实际上会存储一个数组。我特别向您展示了使用此功能获得的示例。它会用任意数量的逗号或空格字符来分割短语,包括 " "、\r、\t、\n 和 \f
            • 与explode() 函数相比,在preg_split() 中使用更昂贵的正则表达式有什么好处?在这种情况下,它们都做同样的事情,但 explode() 更快。
            • 这里的 PHP 手册注释部分 link 他们说:提示如果您不需要正则表达式的强大功能,您可以选择 faster(虽然更简单)替代品,如 explode()str_split()
            猜你喜欢
            • 2020-07-02
            • 1970-01-01
            • 1970-01-01
            • 2012-08-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-30
            相关资源
            最近更新 更多