Autor Zpráva
juraj
Profil
Zdravím ako z reťazca vytvoriť hlavné kategórie a podkategórie,ktoré sa načítavajú z xml súboru v tvare
<product product_id="1" >
<kategorie>Drogerie / Domov / Autokosmetika</kategorie>
</product>

<product product_id="2" >
<kategorie>Drogerie / Praní / Prací prostředky / Speciály</kategorie>
</product>



<product product_id="3" >
<kategorie>Drogerie / Kuchyně / Mytí nádobí / Ruční mytí nádobí</kategorie>
</product>

a chcem dostať
hlavná kategória
Drogerie
Kuchyně
Mytí nádobí
Ruční mytí nádobí

a tu je php kód ako som sa dostal ďaleko

<?include_once "connect.php";set_time_limit(0);
ini_set('memory_limit', '2000M');?>
<?php 
$xml=simplexml_load_file("....") or die("Error: Cannot create object");
    $already_used = array();
foreach($xml->children() as $category) {  

$catname = $category->kategorie;
                     
$kategoriep = explode("/", $catname);
$kategorieppp =count($kategoriep);    
 $output[]=$kategoriep[0];

for($i=0;$i<count($kategoriep);$i++){
if(!in_array($kategoriep[$i],$output)){

 print $output[]=$kategoriep[$i];echo "<br>";

}
}
} 
?>
Kajman
Profil
Zkuste na řádku 12 jen
$output=array();
juraj
Profil
Kajman:
tu je skript, kde sa všetky podkategórie uložili k hlavnej ale k podkategóriam neviem správne priradit parent_id
<?include_once "connect.php";set_time_limit(0);
ini_set('memory_limit', '2000M');?>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title></title>
  </head>
  <body>
<?php 
$xml=simplexml_load_file("https://dedra.blob.core.windows.net/cms/xmlexport/cs_xml_export.xml?ppk=285765") or die("Error: Cannot create object");
    $already_used = array();
    $vsetkykat = 0;
foreach($xml->children() as $category) {  
 
$catname = $category->kategorie;
    $catname = strip_tags($catname);
   $tovar = $category->text1;        
                 $product_id = $category->product_id;          
$kategoriep = explode("/", $catname);

$kategorieppp =count($kategoriep);    

$output[]=$kategoriep[0];
for($i=0;$i<count($kategoriep);$i++){ 
foreach($kategoriep as $key=>$value){   $id=mysql_insert_id()+1;

if(!in_array($kategoriep[$i],$output)){
if(!in_array($value,$output)){

 $kategoriep[0]; 
 $output[]=$kategoriep[$i];

echo "Hlavnakat" ; echo $kategoriep[0];
  echo $kategoriep[$i];
  echo $product_id;
  echo $tovar;
 echo "<br>"; 

if($kategoriep[0]){//ulozili sa hlavne kategorie
    $sql = "SELECT id,name,patrikhlavnejkatid from kategorie WHERE name = '$kategoriep[0]'";
          $result = mysql_query($sql);
         $count=mysql_num_rows($result);
         if($count > 0) {
print " Kategoria uz existuje";
}
else {
   $sql = "SELECT id,name,patrikhlavnejkatid from kategorie WHERE name = '$kategoriep[0]'";

    
     $sql="INSERT INTO kategorie(name,parent_id,patrikhlavnejkatid)
VALUES('$kategoriep[0]','0','$id')"; 
$result=mysql_query($sql);
     
     
}
}if($kategoriep[$i]){//ulozili sa hlavne kategorie
    $sql = "SELECT id,name,patrikhlavnejkatid from kategorie WHERE name = '$kategoriep[$i]'";
          $result = mysql_query($sql);
         $count=mysql_num_rows($result);
         if($count > 0) {
print " Kategoria uz existuje";
}
else {
echo "juraj"; echo $kategoriep[0];

  // $sql = "SELECT id,name,patrikhlavnejkatid from kategorie WHERE name = '$kategoriep[$i]'";
   $sql = "SELECT id,patrikhlavnejkatid from kategorie WHERE name = '$kategoriep[0]'";
        $result = mysql_query($sql);
     WHILE(LIST($id,$patrikhlavnejkatid) = mysql_fetch_row($result)) {
 //$resulti =  mysql_query("INSERT INTO kategorie (name,parent_id,patrikhlavnejkatid) VALUES ('$kategoriep[$i]','55','$patrikhlavnejkatid')");
 

      $sqlf="INSERT INTO kategorie(name,parent_id,patrikhlavnejkatid)
VALUES('$kategoriep[$i]','$id','$patrikhlavnejkatid')"; 
$resultf=mysql_query($sqlf);

 echo $value;echo"fff";

}

}
}
}    
}
}      
} $vsetkykat++;
}
if($vsetkykat==$vsetkykat){
       echo "koniec kategorii,nvlozia sa tovary";
}
?>
Kajman
Profil
Zkusil bych něco takového...

<?php 
$xml=simplexml_load_string('<root><product product_id="1" >
<kategorie>Drogerie / Domov / Autokosmetika</kategorie>
</product>
 
<product product_id="2" >
<kategorie>Drogerie / Praní / Prací prostředky / Speciály</kategorie>
</product>
 
 
 
<product product_id="3" >
<kategorie>Drogerie / Kuchyně / Mytí nádobí / Ruční mytí nádobí</kategorie>
</product></root>') or die("Error: Cannot create object");

function getCatId($nazev, $idNadrazene)
{
    $idNadrazene=($idNadrazene===null?'null':int()$idNadrazene);
    // zkusi najit v databazi tento nazev s timto predkem - něco jako
    $sql = "SELECT id from kategorie WHERE name = '".mysql_real_escape_string($nazev)."' and parent_id=".$idNadrazene;
    // pokud je   - vrati id
    // pokud neni - vlozi do db a vrati nove id
    
    // pro test jen toto
    static $i=1;
    return $i++;
}

$already_used = array('id'=>null, 'polozky'=>array());// případně 'id'=>0 pokud v databázi používáte nulu pro položky bez předka
$produkt_kategorie = array();




foreach($xml->children() as $produkt) {  
    
    $catname = (string)$produkt->kategorie;
    
    $kategoriep = explode("/", $catname);
    $kategorieppp =count($kategoriep);    
    $kam= &$already_used;
    
    for($i=0;$i<$kategorieppp;$i++){
        $kategoriep[$i]=trim($kategoriep[$i]);
        if(!isset($kam['polozky'][$kategoriep[$i]])){
            $kam['polozky'][$kategoriep[$i]]=array('id'=>getCatId($kategoriep[$i], $kam['id']), 'polozky'=>array());
        }
        $kam = &$kam['polozky'][$kategoriep[$i]];
    }
    $produkt_kategorie[(string)$produkt['product_id']]=$kam['id'];
}
print_r($already_used);
print_r($produkt_kategorie);
?>

Po tom cyklu by měly být všechny kategorie nachystané v db a navíc v poli $produkt_kategorie bude pro každé id produktu nachystaná id kategorie.
juraj
Profil
Kajman:
Zdravím
kód som vložil nejak takto
a vypisuje chybu
Warning: Illegal offset type in on line 46
a ako sa polia vkladaju do db
a mena produktov nevypisuje
dakujem vopred za pomoc
<?php 
 
$xml=simplexml_load_file("https://dedra.blob.core.windows.net/cms/xmlexport/cs_xml_export.xml?ppk=285765") or die("Error: Cannot create object");
function getCatId($nazev, $idNadrazene)
{
    $idNadrazene=($idNadrazene===null?'null':$idNadrazene);
    // zkusi najit v databazi tento nazev s timto predkem - něco jako
    $sql = "SELECT id from kategorie WHERE name = '".mysql_real_escape_string($nazev)."' and parent_id=".$idNadrazene;
    // pokud je   - vrati id
    // pokud neni - vlozi do db a vrati nove id
    
    // pro test jen toto
    static $i=1;
    return $i++;
}
 
$already_used = array('id'=>null, 'polozky'=>array());// případně 'id'=>0 pokud v databázi používáte nulu pro položky bez předka
$produkt_kategorie = array();
 
 
 
 
foreach($xml->children() as $produkt) {  
    
    $catname =$produkt->kategorie;
    
    $kategoriep = explode("/", $catname);
    $kategorieppp =count($kategoriep);    
    $kam= &$already_used;
    
    for($i=0;$i<$kategorieppp;$i++){
        $kategoriep[$i]=trim($kategoriep[$i]);
        if(!isset($kam['polozky'][$kategoriep[$i]])){
            $kam['polozky'][$kategoriep[$i]]=array('id'=>getCatId($kategoriep[$i], $kam['id']), 'polozky'=>array());
        }
        $kam = &$kam['polozky'][$kategoriep[$i]];
    }
    $produkt_kategorie[$produkt['product_id']]=$kam['id'];
}
print_r($already_used);
print_r($produkt_kategorie);

?>
Kajman
Profil
Z jakého důvodu jste oddělal přetypování?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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