PHP / CodeIgnitier Получить одно значение из этого многомерного массива PHP - PullRequest
0 голосов
/ 30 марта 2020

Я хочу получить одно значение из этого массива php. Мой массив в PHP:

Array
(
    [0] => stdClass Object
        (
            [id] => 27
            [id_customer] => 19
            [my_cart] => Array
(
    [c81e728d9d4c2f636f067f89cc14862c] => Array
        (
            [id] => 2
            [qty] => 1
            [price] => 39000
            [name] => HEBERGEMENT WEB MUTUALISE PREMIUM
            [rowid] => c81e728d9d4c2f636f067f89cc14862c
            [subtotal] => 39000
        )

    [a87ff679a2f3e71d9181a67b7542122c] => Array
        (
            [id] => 4
            [qty] => 1
            [price] => 150000
            [name] => HEBERGEMENT WEB MUTUALISE ULTIMATE
            [rowid] => a87ff679a2f3e71d9181a67b7542122c
            [subtotal] => 150000
        )

)
1
            [created_at] => 2020-03-30
        )

)

Проблема в том, что я не могу получить кол-во, имя, цену

Я попытался сделать это в моем foreach

foreach($cart_data as $cd){
  echo 'ID Table: '.$cd->id.'<br>';
  echo 'ID customer: '.$cd->id_customer.'<br>';

  $data = $cd->my_cart;
  if(is_array($data)){
    foreach($data as $s){
      echo 'My cart: '.$s;
    }
  }
}

Но ничего не произошло! Я хочу получить цену, имя и кол-во.

Ответы [ 3 ]

0 голосов
/ 30 марта 2020

В этой строке:

    echo 'My cart: '.$s;

Переменная $s содержит массив, а не строку. Если вы следуете своей структуре данных, содержимое $s будет выглядеть примерно так:

    Array (
        [id] => 4
        [qty] => 1
        [price] => 150000
        [name] => HEBERGEMENT WEB MUTUALISE ULTIMATE
        [rowid] => a87ff679a2f3e71d9181a67b7542122c
        [subtotal] => 150000
    )

Таким образом, чтобы получить имя, количество, цену, вам нужно изменить свой внутренний l oop примерно так:

foreach ($data as $s) {
    echo 'Product name: '  . $s['name'] . '<br>';
    echo 'Quantity: '  . $s['qty'] . '<br>';
    echo 'Price: '  . $s['price'] . '<br>';
}

Что происходит, когда вы пытаетесь использовать массив как строку, так это то, что он отображается как строка «Массив» и вызывает PHP Notice: Array to string conversion in [location]. Я предполагаю, что эта ошибка может быть причиной того, что вы ничего не получите, вместо My cart: Array.

0 голосов
/ 31 марта 2020

Я нашел решение. При вставке в базу данных я кодирую это как htmlspecialchars(json_encode($data)) и декодирую с помощью json_decode, получая $ data. Так что теперь у меня есть это:

foreach($cart_data as $cd){
  echo 'ID Table: '.$cd->id.'<br>';
  echo 'ID customer: '.$cd->id_customer.'<br>';
  $data = json_decode($cd->my_cart);

  foreach($data as $row){
    echo $row->name;
    echo $row->qty;
    echo $row->price;
  } 
}
0 голосов
/ 30 марта 2020

Чтобы получить несколько ключей из массива my_cart, попробуйте написать l oop следующим образом:

  foreach($cart_data as $cd){
    echo 'ID Table: '.$cd->id.'<br>';
    echo 'ID customer: '.$cd->id_customer.'<br>';

    $data = $cd->my_cart;
    if(is_array($data)){
        $filtered    = [];
        $keys        = ['qty', 'name', 'price']; // the keys
        $column_keys = array_flip($keys); // getting keys as values
        foreach ($data as $key => $val) {
            // getting only those key value pairs, which matches $column_keys
            $item = array_intersect_key($val, $column_keys);
            if (!empty($item))
                $filtered[$key] = $item;
        }
        echo 'My cart: <br/>';
        print_r($filtered);
    }
  }
...