Převést více čtverečních hodnot konzoly do pole php

hlasů
2

Mám následující data v db

[508] [blah-blah-blah] Random Text
[510] [hello-hello-hello] More random text
[542] [stuff-stuff-stuff] Even more text

To je poměrně hodně db buněk. Celý blok textu je v buňce, a každý řádek textu je oddělen návrat vozíku.

V ideálním případě chci číslo v prvním hranatých závorkách na každém řádku do hodnoty pole. Datová chci skončit s je:

array(508,510,542)

Ještě důležitější je, chci vidět, jak efektivně dostat, že první datové struktury do pole. mám pocit, že by měl být jednoduchý efektivní způsob, jak ji používat, ale kromě nějaké opravdu složité regulární výraz nemohu vidět, jak na to :(

Jakákoliv pomoc by byla kouzelná!

Položena 13/06/2013 v 22:32
uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
3

V PHP můžete souhlasit s čísly pomocí lookarounds pro doslovné závorkách za použitípreg_match_all()

<?php

    $string = '[508] [blah-blah-blah] Random Text
    [510] [hello-hello-hello] More random text
    [542] [stuff-stuff-stuff] Even more text';
    preg_match_all ('!(?<=\[)([0-9]+)(?=\])!',$string,$matches);
    print_r($matches[0]);

?>

Výstup

Array
(
    [0] => 508
    [1] => 510
    [2] => 542
)

Zpracovat všechny záznamy z databáze, měli byste něco takového:

    $result = mysqli_query($sql);
$records = array(); 
while ($row = mysqli_fetch_array($result)){


        preg_match_all ('!(?<=\[)([0-9]+)(?=\])!',$row['my_text_field'],$matches);
        foreach($matches[0] as $value){     
        $records[]=$value;
        }

}

print_r($records);      
Odpovězeno 13/06/2013 v 22:38
zdroj uživatelem

hlasů
0

Z DB přímo:

mysqli_query("SELECT SUBSTRING_INDEX(SUBSTRING(your_column_name, 1), ']', 1) FROM tablename");

SUBSTRING (str, pos) funguje jako substr () by v php v tom, že extrakt plátek původního řetězce.

SUBSTRING(your_column_name, 1) Prostředky kopírovat „your_column_name“ počínaje indexem 1 až do konce.

[508] [blah-blah-blah] Random Text
Becomes
508] [blah-blah-blah] Random Text

SUBSTRING_INDEX (str, C, X) zkopírovat celý string str do X. výskytu znaku C

SUBSTRING_INDEX(str, ']', 1) znamená zkopírovat celý řetězec až do prvního výskytu]

508] [blah-blah-blah] Random Text

stává

508
Odpovězeno 13/06/2013 v 22:39
zdroj uživatelem

hlasů
1

Vzhledem k tomu, že vaše čísla se vždy objeví na začátku každého řádku, výraz je velmi jednoduchá:

$input = <<<EOM
[508] [blah-blah-blah] Random Text
[510] [hello-hello-hello] More random text
[542] [stuff-stuff-stuff] Even more text
EOM;

preg_match_all('/^\[(\d+)\]/m', $input, $matches);
print_r($matches[1]);

Jsem pomocí /mmodifikátor povolit víceřádkový režim, což ^tak, aby odpovídala začátku každého řádku.

Odpovězeno 14/06/2013 v 00:46
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more