21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Pavel Trololo
Profil *
Ahoj, mám v databázi uložené v jednom ze sloupců data ve tvaru..
Auto => Škoda Rapid; Jméno => Pavel Trololo; Další => Cokoliv;

Pak to vytáhnu z databáze a uložím to do pole takhle:
$array1 = array($answer['info']);

Ale vůbec mi nejde žádným způsobem z toho dostávat data.

$array1[0] mi vypíše jen první písmeno. Co dělám špatně, zkoušel jsem i foreach i json_decode, ale pořád stejný nebo error.
lionel messi
Profil
Pavel Trololo:
Pak to vytáhnu z databáze a uložím to do pole takhle:
Ako presne ťaháš údaje z databázy?

$array1[0] mi vypíše jen první písmeno.
Podobná situácia nastane, keď pristupuješ k reťazcu ako k poľu, to naznačuje, že $array1 je reťazec. Možno by som skúsil var_dump($array1) na ozrejmenie skutočného obsahu a typu premennej.
Pavel Trololo
Profil *
lionel messi:
No, takhle..

mysql_query("SET NAMES utf8");
$question = mysql_query("SELECT * FROM Tabulka WHERE `URL` = '$vyraz'");
$answer=mysql_fetch_array($question);

a var_dump mi vypíše
array(1) { [0]=> string(121) "Auto => Škoda Rapid; Jméno => Pavel Trololo; Další => Cokoliv;" }
lionel messi
Profil
Pavel Trololo:
Až teraz som si všimol toto:

mám v databázi uložené v jednom ze sloupců data ve tvaru..
Auto => Škoda Rapid; Jméno => Pavel Trololo; Další => Cokoliv;

V prvom rade to zaváňa veľmi zlým databázoým návrhom. Máš nejaký (rozumný) dôvod na ukladanie takéhoto „gulášu“ do jedného stĺpca? Prečo neuložíš do jedného auto, do druhého meno a tak ďalej?
Pavel Trololo
Profil *
lionel messi:
Mno, ve skutečnosti jsem chtěl dát poddotaz jestli je to dobré řešení, ale pak jsem to smazal. Fakt. :)

Důvody jsou:
1) Nevím kolik položek tam bude... cca 1 - 5, ale může být i víc.
2) Hlavně kvůli fulltextovému vyhledávání mi to příjde lepší řešení, než to rozložit do 5 sloupců.
Fisir
Profil
Reaguji na Pavela Trolola:
Funkci array() předáš klíče a hodnoty a ona podle nich vytvoří pole. Ty ale z databáze vybereš string a ten jí předáš. Ona si to vyloží jako pole bez klíče s jedním prvkem, a proto ti var_dump vypisuje to, co ti vypisuje. Jak již zmínil [#4] lionel messi, pravděpodobně je to špatným návrhem databáze a pokud jej nezměníš, nepůjde to jednoduše řešit.

$array1 = array();
$items = explode(';', $answer['info']);
foreach($items as $item){
    $parsed = explode('=>', $item, 2);
    if(count($parsed) === 2){
        $array1[trim($parsed[0])] = trim($parsed[1]);
    }
}

Tento kód provede to, co chceš. Je to ale prasácké řešení a doporučuji ho buď vůbec nepoužívat, nebo jen dočasně, než opravíš ten návrh databáze. Případně se jako lepší řešení jeví použít jednoduše parsovatelný JSON.
Pavel Trololo
Profil *
Dobře, mám tam 1 až dejme tomu 10 položek, které chci vypsat a fultextově prohledávat. Navíc ty položky můžou být relativně unikátní, není dáno vždy jméno, auto. Prostě 1-10 různých položek, kde je název hodnoty a hodnota. A zároveň nikterak nepotřebuji sortovat podle jednotlivých položek. Je pak opravdu lepší to rozdělit do deseti sloupců?


Nebo univerzálně, chtěl bych prostě ukládat pole, lze to nějakým fíglem ukládat do databáze?
Fisir
Profil
Reaguji na Pavela Trolola:
chtěl bych prostě ukládat pole, lze to nějakým fíglem ukládat do databáze?
JSON.
Pavel Trololo
Profil *
Fisir:
JSON.

Tak děkuji, funguje to.

$testJSON = array($array1);
echo $testJSON[0];
echo "<hr>";
echo json_encode($answer['info']);

Uložil jsem to do databáze ve formátu JSON, sice mi to funguje přes json_encode() prapodivně, ale přes ten array to jde zase hezky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0