phparraysserializationdrupalubercart

How to loop and get serialized values from database with php


I'm developing a pizza's restaurant ecommerce and now I'm trying to get the size (Familiar) and the ingredients (Pernil dol�, Bac�, Emmental) of a pizza that was ordered previously. The data I want to get (the italic values in this paragraph) becomes serialized from database:

a:4:{s:10:"attributes";a:2:{s:6:"Tamany";a:1:{i:3;s:8:"Familiar";}s:11:"Ingredients";a:3:{i:318;s:12:"Pernil dol�";i:270;s:5:"Bac�";i:294;s:8:"Emmental";}}s:9:"shippable";s:1:"0";s:4:"type";s:5:"pizza";s:6:"module";s:10:"uc_product";}array(4) { ["attributes"]=> array(2) { ["Tamany"]=> array(1) { [3]=> string(8) "Familiar" } ["Ingredients"]=> array(3) { [318]=> string(11) "Pernil dol�" [270]=> string(4) "Bac�" [294]=> string(8) "Emmental" } } ["shippable"]=> string(1) "0" ["type"]=> string(5) "pizza" ["module"]=> string(10) "uc_product" }

I discovered 'unserialized' php method and I tried this:

$attr = $row['data']; // data from database
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $attr); // I did this because I get some errors...

After I did that, I got this multidimensional array (a bit more human readable):

array(4) { ["attributes"]=> array(2) { ["Tamany"]=> array(1) { [3]=> string(8) "Familiar" } ["Ingredients"]=> array(3) { [318]=> string(11) "Pernil dol�" [270]=> string(4) "Bac�" [294]=> string(8) "Emmental" } } ["shippable"]=> string(1) "0" ["type"]=> string(5) "pizza" ["module"]=> string(10) "uc_product" }

Next step was try to loop the resulting data with a foreach loop, like the following:

foreach($data['attributes'] as $item)
  {
    print '<ul>';

    foreach($item as $value)
    {
        print_r('<li>' . $value . '</li>');
    }

    print '</ul>';
  }

I'm a php beginner PHP developer and I can't figure out how can I loop this array in order to get the values I need. I'm getting this error:

Warning: Invalid argument supplied for foreach() in /home/my_host/public_html/dev.mysite.com/inc/file.php on line 79

Can anybody tell me how I have to loop this array to get the data? Any help will be very, very appreciated.

Best regards,


Solution

  • I created this example for you. First I declared an array which believe mimics the array you have to parse. Then I looped through and outputed the contents of the array.

    <?php
    
    $array = array(
        0 => array(
            '0' => 'John Doe',
            '1' => 'john@example.com'
        ),
        1 => array(
            '0' => 'Jane Doe',
            '1' => 'jane@example.com'
        ),
    );  
    
    foreach ($array as $key => $value) {
    
        $thisArray = $array[$key];
    
        print_r('<ul>');
        foreach ($thisArray as $key2 => $value){
          print_r('<li>'.$thisArray[$key2].'</li>');
        }
        print_r('</ul>');
    }
    ?>