2016-02-28 3 views
17

У меня есть база данных с рядом «жанром» это содержит все виды жанров для фильма отделен пробелом, как пример этого будетмагазин информации и вытаскивать в массиве

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"); 
+4

СТОП С ИСПОЛЬЗОВАНИЕМ mysql_ *! используйте mysql ** i ** _ * вместо этого !! –

+1

Возможный дубликат [Разделение строки в PHP с каждым пробелом] (http://stackoverflow.com/questions/5020202/splitting-up-a-string-in-php-with-every-blank-space) – Tushar

+0

Также см. [Php explode: split string в слова, используя пробел разделителя] (http://stackoverflow.com/questions/18638753/php-explode-split-string-into-words-by-using-space-a-delimiter) – Tushar

ответ

28

Вы пробовали использовать функцию explode?

Что-то вроде:

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

Я бы рекомендовал это для функции preg_split. Чище, проще смотреть и быстрее. С другой стороны, почему бы не нормализовать вашу базу данных немного для эффективности с отношениями «один ко многим»? – Simon

+0

не уверен, что вы имеете в виду simon –

+0

STOP ИСПОЛЬЗОВАНИЕ mysql_ *! используйте mysqli_ * вместо этого !! –

-2
$genreArray = preg_split("/[\s,]+/", "Animation Comedy Horror"); 
print_r($genreArray); 

Выход:

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

смотрит на то, что мне нужно, быстрый вопрос будет работать в синтаксисе –

+0

$ genreArray = preg_split ("/ [\ s,] + /", $ row-> жанр); и действительно ли он будет хранить массив внутри $ genreArray –

+0

Да, он фактически сохранит массив. Я особенно показываю вам пример того, что вы получаете, используя эту функцию. Он разделит фразу на любое количество запятых или пробелов, которые включают «", \ r, \ t, \ n и \ f – gofr1

4

Понять эти и использовать соответственно.

<?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); 
?> 

Check This: https://eval.in/532527

Также Понимать о,

взрываются: http://php.net/manual/en/function.explode.php

PREG-сплит: http://php.net/manual/en/function.preg-split.php

УЗД его: http://php.net/manual/en/function.split.php

сплит теперь лишен.

+0

мог бы использовать help http://stackoverflow.com/q/35641099/5491906 –

-1

Попробуйте

  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); 
    } 
    ?> 
    
3
$result = preg_split("/[\s,]+/", "Animation Comedy Horror"); 
    print_r($result); 
    print_r(implode(",",$result)); 

OUT PUT

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

Animation,Comedy,Horror 
5

Вот еще ближе к логике.

$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 

Надеемся, что наши ответы принесут вам больше разъяснений.

+1

Мне это очень нравится :) дает действительно хороший пример того, что можно сделать, но кто-то уже дал мне то, что мне нужно, ответил сначала, так что я могу дайте вам взнос :) –

+1

Спасибо, что узнали мой ответ @Joseph Flames Я согласен с тем, что JamesBlond имеет самый лучший и самый простой ответ.^_^ – yul757

+1

i upvote, потому что ваш ответ правильный и быть фанатичным :) –

3

ПРЕДУПРЕЖДЕНИЕ
Прекратите использование mysql_ * функции, по нескольким причинам: полностью удалены, официально осуждается, ... и для исчерпывающего списка, Вы можете прочитать эту тему Why shouldn't I use mysql_* functions in PHP?, вместо этого вы можете использовать mysqli_* или PDO

Я думаю, что это очень плохой дизайн для хранения жанра, как вы это делаете
Как вы будете обновлять свои данные?
Как получить фильмы по жанрам?

Каждая простая операция SQL будет кошмар, вместо этого, тратить свое время, чтобы исправить злопыхателям, например, вы можете просто создать отдельную таблицу из жанра

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

И создать Entity таблицу, которая будет связать фильм с [1, N] жанра

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

Попробуйте использовать explode() функции РНР. Эта функция ожидает 2 параметра, разделитель и строку. Разделитель должен быть тем, что вы хотите найти в строке для разделения элементов. На практике это будет выглядеть так:

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

Теперь $genreArray будет выглядеть примерно так (вывод, сгенерированный из var_dump($genreArray)):

array(3) { [0]=> string(9) "Animation" [1]=> string(6) "Comedy" [2]=> string(6) "Horror" } 
Смежные вопросы