Avatar billede jespera Nybegynder
10. september 2006 - 16:32 Der er 8 kommentarer og
1 løsning

array_push - hvad gør jeg galt

Hej Alle,

Syntes ikke rigtigt mit array vil fyldes korrekt.

Result_array er 4 dvs der er 4 varer i databasen. Array bliver da også 4 stort og når jeg lave echo $result_array[$i]['product_id'] skriver den også id ud. Men jeg kan ikke trække nogle informationer ud af array'et?

/Her fyldes array
$array = array();
    for ($i=0; $i<sizeof($result_array); $i++)
    {       
        array_push( $array, array( $result_array[$i]['product_id'] => new product(
                $result_array[$i]['product_id'],
                $result_array[$i]['product_item_id'],
                $result_array[$i]['product_name'],
                "",
                $result_array[$i]['product_price'],
                "",
                $result_array[$i]['product_description']
                )
            )
        );           
    }

//Her er product class
class product {
    var $id;
    var $itemid;
    var $name;
    var $img;
    var $price;
    var $weight;
    var $description;
   
    function product($id, $itemid, $name, $img, $price, $weight, $description) {
        $this->id = $id;
        $this->itemid = $itemid;
        $this->name = $name;   
        $this->img = $img;
        $this->price = $price;
        $this->weight = $weight;
        $this->description = $description;
    }
}

//Her prøver jeg at udskrive
foreach ($array as $id => $product) {
?>
    <div class="product">
        <h3><?=$product->name?></h3>       
<?

Håber i kan hjælpe mig :-)
Avatar billede codebase Praktikant
10. september 2006 - 17:21 #1
dit problem er at du kaster et array og ikke objektet ind i dit 'array_push'

tilrettet herunder


<?php
$result_array[0]['product_id'] = 1;
$result_array[0]['product_item_id'] = 2;
$result_array[0]['product_name'] ='product 1';
$result_array[0]['product_price'] = 120;
$result_array[0]['product_description'] = '1. product';

$result_array[1]['product_id'] = 2;
$result_array[1]['product_item_id'] = 3;
$result_array[1]['product_name'] ='product 2';
$result_array[1]['product_price'] = 130;
$result_array[1]['product_description'] = '2. product';

//Her fyldes array
$array = array();
    for ($i=0; $i<sizeof($result_array); $i++)
    {       

        array_push( $array,  new product(
                $result_array[$i]['product_id'],
                $result_array[$i]['product_item_id'],
                $result_array[$i]['product_name'],
                "",
                $result_array[$i]['product_price'],
                "",
                $result_array[$i]['product_description']
                )
         
        );           
    }

//Her er product class
class product {
    var $id;
    var $itemid;
    var $name;
    var $img;
    var $price;
    var $weight;
    var $description;
   
    function product($id, $itemid, $name, $img, $price, $weight, $description) {
        $this->id = $id;
        $this->itemid = $itemid;
        $this->name = $name;   
        $this->img = $img;
        $this->price = $price;
        $this->weight = $weight;
        $this->description = $description;
    }
   

}

//Her prøver jeg at udskrive

foreach ($array as $id => $product) {

?>
    <div class='product'>
        <h3><?php echo $product->name; ?> </h3>       
<?php
}

?>
Avatar billede jespera Nybegynder
10. september 2006 - 17:43 #2
Nååå for pokker jamen er key i arrayet så ikke product_id?
Avatar billede codebase Praktikant
10. september 2006 - 17:58 #3
jo og nej..

foreach ($array as $id => $product)

her er 'id' jo ikke produktID'et men arrayets id, tror det er sådan noget du gjore forkert. Men den anden løsning virker jo, så den ville jeg holde mig til :)

array(2) {
  [0]=>
  array(1) {
    [1]=>
    object(product)(7) {
      ["id"]=>
      int(1)
      ["itemid"]=>
      int(2)
      ["name"]=>
      string(9) "product 1"
      ["img"]=>
      string(0) ""
      ["price"]=>
      int(120)
      ["weight"]=>
      string(0) ""
      ["description"]=>
      string(10) "1. product"
    }
  }
  [1]=>
  array(1) {
    [2]=>
    object(product)(7) {
      ["id"]=>
      int(2)
      ["itemid"]=>
      int(3)
      ["name"]=>
      string(9) "product 2"
      ["img"]=>
      string(0) ""
      ["price"]=>
      int(130)
      ["weight"]=>
      string(0) ""
      ["description"]=>
      string(10) "2. product"
    }
  }
}
Avatar billede jespera Nybegynder
10. september 2006 - 18:14 #4
hmm :-)

Jamen når man gør sådan her

$products = array(

"SKU003" =>
new product(bl, bla, bla),

"SKU004" =>
new product(bla11,bla1,blav)

);

Vil f.eks. SKU003 så ikke være key altså id i arrayet når man laver foreach ($array as $id => $product)
Avatar billede codebase Praktikant
10. september 2006 - 18:35 #5
array(2) {
  [0]=>
  array(1) {
    [1]=>
    object(product)(7) {


nej ikke i det første array, det er i det næste men der vil jo altid kun være et objekt i arrayet.

det 1. arrays key er 0, det samme id som jeg har fra
<?php
$result_array[0]['product_id'] = 1;

selve arrayet du gemmer i 1. array, dennes key er 1 (dit 'product_id')
Avatar billede jespera Nybegynder
10. september 2006 - 19:20 #6
aha...gruden til at jeg spurgte omkring det array halløjsa er at jeg er ved at sætte en db på den her kode http://www.auberger.com/couffin/

men når jeg nu i min index.php fil har

<form action="cart.php" method="post">
<input type="hidden" name="action" value="add" />
<input type="hidden" name="qty" value="1" />
<input type="hidden" name="id" value="<?=$id?>" />
<button type="submit" class="button">Add</button>
</form>

og submitter så ryger den til cart.php

Hvordan kan jeg så fange navn, pris mm? kan jeg på en eller anden måde smide et hel objekt med som jeg så kan trække data ud fra?

Jeg smider lige nogle flere point i puljen, da spørgsmålet er blevet udvidet, håber det er ok
Avatar billede codebase Praktikant
10. september 2006 - 19:59 #7
<input type="hidden" name="id" value="<?=$id?>" /> er vel produkt id'et, i cart.php har du jo muligheden for at hente objektet igen. men du mangler jo en get funktion til at hente fra databasen.

function get( $id ) {
//DATA FRA DATABASEN
SELECT FROM db WHERE product_id ='$id'

$product = new product( $id, $itemid, $name, $img, $price, $weight, $description );

return $product;
}


jeg samler ikke på points, og kender ikke lige sovsen  http://www.auberger.com/couffin/

leg lidt med det ellers opret et nyt spg. vedr. problemet.
Avatar billede jespera Nybegynder
10. september 2006 - 20:03 #8
oki, ingen problem, tak for hintet med get. Den vil jeg nok lege lidt med. Ligger du et svar?

Tusind tak for din gode hjælp
Avatar billede codebase Praktikant
10. september 2006 - 20:13 #9
denne ene gang så, samler jo ellers ikke på points mere...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester