2013-11-10 3 views
1

Так что мои знания о php-массивах ограничены. Я прочитал PHP Arrays - Manual Но это не объяснило это достаточно для меня, чтобы понять это честно.Добавить элементы в массив

У меня есть следующие в if{} else{} заявлении с этим будучи else{}

// Set up an array for the items 

while($row = mysqli_fetch_array($result)) 
{ 
    $source = $row['source']; 
} 

$items = array( 
    "id" => $id, 
    "source" => $source, 
); 

$_SESSION['items'] = $items; 

Скажем, у меня есть следующие пункты:

Item A with an ID of 1 and source of foo 
Item B with an ID of 2 and source of boo 
Item C with an ID of 3 and source of goo 

, если эта функция вызывается с item A, массив созданный с идентификатором 1 и источником foo, и это все, что находится в массиве. И массив Вытряхивали как:

array(2) { ["id"]=> string(2) "25" ["source"]=> string(64) "https://www.alphahq.org/shop/views/assets/images/items/item2.jpg" } 

Теперь, что если функция получает снова призвал item B прямо сейчас, как он устанавливает, массив будет изменен на переменные для item BПравильно?

Как бы я мог добавить item A и item B в тот же массив и определить их как отдельные элементы.

Так в основном, как я мог бы сделать это:

array { 
    item A { 
    id => 1 
    source => foo 
    } 
    item B { 
    id => 2 
    source => boo 
    } 
} 

И просто построить массив, как добавляется элемент. Я сохраняю массив в сеансе, может ли это быть полезным при извлечении и добавлении массива при каждом вызове функции?

Для дополнительной помощи мой полный файл shopping-functions.php приведен ниже для справки.

<?php 

session_start(); 

require('../../config/database-connect.php'); 

// Start a new order for a customer 
$action = $_GET['action']; 
$id  = $_GET['id']; 

// First make sure the action is not blank 
if ($action == '') { 

    echo 'Please select an action'; 
} 

if ($action == 'add') { 

    // Check if the id matches one in the database 
    $result = mysqli_query($con,"SELECT id, source FROM items WHERE id='$id'"); 

     if (mysqli_num_rows($result) == 0) { 

      echo 'That id is not valid!'; 
     } 
     else { 

      // Set up an array for the items 

      while($row = mysqli_fetch_array($result)) 
      { 
       $source = $row['source']; 
      } 

      $items = array(
       "id" => $id, 
       "source" => $source, 
      ); 

      var_dump($items); 

      $_SESSION['items'] = $items; 
     } 
} 

?> 

ответ

0

первый сделать это

$items = array(); // it's a good practice to initialize first 
while($row = mysqli_fetch_array($result)) 
{ 
    $items[] = array(// these [] means it will append to last part of array 
     "id" => $id, 
     "source" => $row['source'], // key with source 
    ); 
} 
// here if you var_dump($items) you will see the result 
+0

Это нормально, но вам также нужно инициализировать $ items где-то как '$ items = array();' просто быть в безопасности. –

+0

Похоже, что это может сработать, хотя, я ненавижу, когда ложка кормится, я не собираюсь копировать и вставлять. Пожалуйста, объясните в своем ответе на ваш код. Заранее спасибо! :) – user2948950

0
while($row = mysqli_fetch_array($result)) 
         { 
           $source = $row['source']; 
           $items = array(
            "id" => $id, 
            "source" => $source, 
           ); 
          $_SESSION['items'][] = $items; 
         } 

Multi - dimensional array 

Вы, вероятно, хотите сохранить еще один массив в $_SESSION['items'];, что делает его многомерным массивом.

, что [] будет делать то, что он стек следующие кормил значения на следующий доступный ключ

Средства первое значение $item будет храниться в $_SESSION['items'][0] 2 значения $item будут сохранены в $_SESSION['items'][1] и так далее ..

+0

Похоже, что это может сработать, хотя, я ** Ненавижу **, будучи ложкой, я не собираюсь копировать и вставлять. Пожалуйста, объясните в своем ответе на ваш код. Заранее спасибо! :) – user2948950

+0

Я добавил некоторое объяснение, но для лучшего понимания я бы порекомендовал вам лучший учебник по многомерным массивам в google. Есть много многих доступных – codepixlabs

+0

Это, кажется, не строительство. Я добавил метод foreach для эхо-вывода каждого массива. http://alphahq.org/shop/config/functions/shopping-functions.php?action=add&id=65 нажмите, а затем измените значение 65 на 25, и вы увидите, что я имею в виду. – user2948950

0

в этом случае

// Based on pr1nc3's answer 
$_SESSION['items'] = array(); // create a new array 

foreach($myResult as $row) 
    $_SESSION['items'][] = $row; 

[] это волшебство здесь: он говорит PHP «Возьмите массив идентифицированного прежде, чем [] и нажмите этот пункт на него»- на самом деле, это, по существу, обобщающим для метода array_push:

$a = $b = array(); 
$c = array(1,2,3,4,5,6); 

foreach($c as $value) { 
    $a[] = $value; 
    array_push($b, $value); 
} 

После вышесказанного $a и $b будет выглядеть так же, в var_dump вызова.

0

От doc:

array_push — Push one or more elements onto the end of array 
...Has the same effect as: 

$array[] = $var; 

Давайте применим, что к вашему делу:

$items = array(); // has to be initialised first, somewhere in your code 
// .... 
// Then after your while loop 
$new_item = array("id" => $id, "source" => $source); 

array_push($items, $new_item); // append $new_item inside $items as its last value. 

Надеется, что это помогает!

Смежные вопросы