PHP / Laravel многомерный массив - PullRequest
0 голосов
/ 15 октября 2018

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

 $cart[$data->resource_id] = array
 (
 'resID' => $data->resource_id,
 'stoID' => $data->stock_id,
 'stoName' => $data->sto_name,
 'resName' => $data->res_name,
 'actQuantity' => $data->quantity,
 'minimum' => $data->minimum,
 'quantity' => $quant
 );

, но сейчас мне нужно сохранить данные в массив с чем-то с двумя индексами (?).Первый индекс - resource_id, secound stock_id - так что я знаю, что с товаром он есть, а с товаром он есть.Поэтому я думаю, что-то вроде этого

 $cart[$data->resource_id, $data->stock_id] = array
 (
 'resID' => $data->resource_id,
 'stoID' => $data->stock_id,
 'stoName' => $data->sto_name,
 'resName' => $data->res_name,
 'actQuantity' => $data->quantity,
 'minimum' => $data->minimum,
 'quantity' => $quant
 );

, но это явно не правильный код.

У вас есть какие-нибудь идеи, как это сделать?

Большое вам спасибо.

Ответы [ 4 ]

0 голосов
/ 15 октября 2018

PHP не поддерживает многомерные массивы, по крайней мере, не так, как вы хотите.

Чтобы сделать многомерные массивы на PHP, вы должны использовать вложенные массивы:

$a = [
    "keyA" => [
        "keyB" => 'somedata';
    ]
]

Так что вам нужночтобы инициализировать массив:

$cart = [];

$cart[$data->resource_id] = []; // Do this just in the first time that you insert something inside that `resource_id`, otherwise you will resetting the array.

$cart[$data->resource_id][$data->stock_id] = [
    //... your data here ...
]

Например, представьте, что вы хотите получить эти данные:

$input = [
    [ 'id' => 1, 'stock_id' => 1, 'name' => 'foo' ],
    [ 'id' => 1, 'stock_id' => 2, 'name' => 'bar' ],
    [ 'id' => 1, 'stock_id' => 3, 'name' => 'biz' ],
]

и упорядочить их по id и stock_id.

Вы должны сделать такой скрипт:

$output =  [];

foreach ($input as $item) {
    if (!array_key_exists($item['id'], $output)) {
        $output[$item['id']] = []; // Initializing the 2nd level array
    }

    $output[$item['id']][$item['stock_id']] = $item;
}

Массив $output будет выглядеть так:

[
    1 => [
        1 => [ 'id' => 1, 'stock_id' => 1, 'name' => 'foo' ],
        2 => [ 'id' => 1, 'stock_id' => 2, 'name' => 'bar' ],
        3 => [ 'id' => 1, 'stock_id' => 3, 'name' => 'biz' ],
    ]
]

Таким образом, вы можете получить доступ к данным следующим образом:

echo $output[1][3]['name']
// Will output `biz`
0 голосов
/ 15 октября 2018

php многомерный массив: определить:

$cars =
    [
        ["Volvo", 22, 18,[2018,19,5]],
        ["BMW", 15, 13,[2018,10,2]],
        ["Saab", 5, 2,[2018,20,5]],
        ["Land Rover", 17, 1,[2018,19,6]]
    ];

использовать:

echo $cars[0][0].": In stock: ".$cars[0][1].", sold: ".$cars[0][2].", manufactured(year): ".$cars[0][3][0].".<br>";
echo $cars[1][0].": In stock: ".$cars[1][1].", sold: ".$cars[1][2].", manufactured(year): ".$cars[0][3][0].".<br>";
echo $cars[2][0].": In stock: ".$cars[2][1].", sold: ".$cars[2][2].", manufactured(year): ".$cars[0][3][0].".<br>";
echo $cars[3][0].": In stock: ".$cars[3][1].", sold: ".$cars[3][2].", manufactured(year): ".$cars[0][3][0].".<br>";

в вашем коде:

 $cart[$data->resource_id][$data->stock_id]
0 голосов
/ 15 октября 2018

Вы можете создать массив, как показано ниже.

$cart[$data->resource_id] = [ 
    $data->stock_id => [

        'resID' => $data->resource_id,
        'stoID' => $data->stock_id,
        'stoName' => $data->sto_name,
        'resName' => $data->res_name,
        'actQuantity' => $data->quantity,
        'minimum' => $data->minimum,
        'quantity' => $quant
    ] 
]
0 голосов
/ 15 октября 2018

Вы выбираете его по $cart[$data->resource_id][$data->stock_id], поэтому без запятой.Чтобы установить значение, вы можете набрать

$cart[$data->resource_id][$data->stock_id] = [
   'stoName' => $data->sto_name,
   'resName' => $data->res_name
];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...