2016-02-28 15 views
17

Ho un database con un 'genere' di fila questa contiene tutti i tipi di generi per il film separati da uno spazio come un esempio di questo sarebbenegozio di informazioni e tirare fuori in ordine di

Animation Comedy Horror 

Sono tutti generi diversi quindi hanno bisogno di essere tirato fuori il database e mettere in un array in base alle loro generi originariamente ho iniziato la codifica questo:

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

Ma presto mi sono reso conto subito dopo che ogni genere sta per essere bisogno di essere inserire l'array separato se l'ho fatto

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

Ma questo non funzionerà genererebbe una serie come

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

Ma ha bisogno di generare

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

smettere di usare mysql_ *! usa mysql ** i ** _ * invece !! –

+1

Possibile duplicazione di [Dividere una stringa in PHP con ogni spazio vuoto] (http://stackoverflow.com/questions/5020202/splitting-up-a-string-in-php-with-every-blank-space) – Tushar

+0

Vedi anche [php explode: divide la stringa in parole usando lo spazio un delimitatore] (http://stackoverflow.com/questions/18638753/php-explode-split-string-into-words-by-using-space-a-delimiter) – Tushar

risposta

28

Hai provato a usare la funzione explode?

Qualcosa di simile:

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

Lo raccomanderei sopra la funzione preg_split. Più pulito, più semplice da guardare e più veloce. In un'altra nota, perché non normalizzare il database un po 'per l'efficienza con una relazione uno-a-molti? – Simon

+0

non sai cosa intendi simon –

+0

STOP USING mysql_ *! usa mysqli_ * invece !! –

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

L'output:

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

guarda su quello che ho bisogno di una domanda veloce avrebbe questo lavoro nella sintassi –

+0

$ genreArray = preg_split ("/ [\ s,] + /", $ row-> genere); e in effetti memorizzerebbe un array all'interno di $ genreArray –

+0

Sì, in realtà memorizzerebbe un array. In particolare, ti mostro un esempio di ciò che ottieni usando questa funzione. Divide la frase in base a un numero qualsiasi di virgole o spazi, che includono "", \ r, \ t, \ n e \ f – gofr1

4

capire questi e utilizzare di conseguenza.

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

controllare questo: https://eval.in/532527

anche capire circa,

esplodere: http://php.net/manual/en/function.explode.php

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

spl it: http://php.net/manual/en/function.split.php

split è ora privato.

+0

potrebbe usare la guida http://stackoverflow.com/q/35641099/5491906 –

-1

Prova questo

  1. attraverso molteplici matrici:

    <? 
    $sql = "SELECT moviename,genre FROM movieHosting"; 
    $query = mysql_query($sql); 
    $row = mysql_fetch_array($query); 
    /* fetched value */ 
    $moviename = $row['moviename']; 
    $genre= $row['genre']; 
    ?> 
    
  2. Attraverso singole matrici per la produzione di risultare come $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)); 

fuori messa

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

Animation,Comedy,Horror 
5

Qui è più vicino alla tua logica.

$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 

Spero che le nostre risposte apporteranno ulteriori chiarimenti al tuo problema.

+1

Mi piace molto questo :) dà un esempio davvero bello di cosa si può fare comunque qualcuno mi ha già dato quello di cui ho bisogno e prima ho risposto così tutto ciò che posso darti è un upvote :) –

+1

Grazie per aver riconosciuto la mia risposta @Joseph Flames Sono d'accordo sul fatto che JamesBlond abbia la risposta migliore e più semplice.^_^ – yul757

+1

I upvote perché la tua risposta è corretta e per essere un SO fanatico :) –

3

ATTENZIONE
Smettere di usare mysql_ * funzioni, per diverse ragioni: completamente rimosso, ufficialmente deprecata, ... e per elenco esaustivo si può leggere questa discussione Why shouldn't I use mysql_* functions in PHP?, invece è possibile utilizzare mysqli_* o PDO

Penso che sia un pessimo design archiviare il genere come lo fai tu
Come aggiornerai i tuoi dati?
Come recuperare i film per genere?

Ogni operazione SQL semplice sarà un incubo, invece di questo, trascorrere il tempo di correggere la desgin, ad esempio, si può semplicemente creare una tabella dedicata dal genere

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

e creare un tabella di entità che sarà associare il film con [1, N] genere

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

Provare a utilizzare la funzione di PHP explode(). Questa funzione richiede 2 parametri, un delimitatore e una stringa. Il delimitatore dovrebbe essere ciò che si desidera cercare nella stringa per separare gli elementi. In pratica questo sarebbe simile:

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

Ora $genreArray sarà simile a questa (output generato da var_dump($genreArray)):

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