Создайте массив одинаковых ключей

У меня есть массив $ produtcs, как показано ниже

Array
(
[0] => Array
    (
        [Sku] => 149826761     
        [Price] => 777.00
    )

[1] => Array
    (   
        [Sku] => 149826762
        [Price] => 862.00
    )

[2] => Array
    (
        [Sku] => 149826763
        [Price] => 661.00
    )
)

Мне нужно создать массив из вышеуказанного массива, который содержит SKU, цену в качестве ключей и собрать все SKU в массиве как значение.

Не могли бы вы опубликовать, какой результат вы ожидаете?

AnTrakS 26.10.2018 08:37

Мне нужно сделать массив типа SKU -> [149826761,149826762,149826763]

Magecode 26.10.2018 08:40

Покажи, что ты пробовал? Мы здесь, чтобы помочь вам, если у вас есть проблемы с испытанным кодом.

Leena Patel 26.10.2018 09:02
5
3
1 519
3

Ответы 3

Я считаю, что вы ищете array_column.

Это изолирует один столбец / ключ от массива и создает плоский массив из входного массива.

$new = array_column($arr, "Sku");
var_dump($new);

Выход:

array(3) {
  [0]=>
  int(149826761)
  [1]=>
  int(149826762)
  [2]=>
  int(149826763)
}

Но вы еще пишете, что хотите цену в массиве. Полагаю, вы этого хотите:

array(3) {
  [149826761]=>
  string(6) "777.00"
  [149826762]=>
  string(6) "862.00"
  [149826763]=>
  string(6) "661.00"
}

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

$new = array_column($arr,"Price", "Sku");
var_dump($new);

Нет, мне нужно создать то, что задано в этом вопросе, но в php stackoverflow.com/questions/26898363/…

Magecode 26.10.2018 08:45

@Magecode ваш вопрос непонятен. Обновите свой вопрос, указав ожидаемый результат

Andreas 26.10.2018 08:46

Вы можете использовать foreach для группировки элементов по цене. Например:

// source data
$products = [    
    [
       'Sku' => 149826761,     
       'Price' => 777.00
    ],
    [ 
        'Sku' => 149826762,
        'Price' => 862.00
    ],
    [
        'Sku' => 149826763,
        'Price' => 661.00
    ]
];

// array grouping
$items = [];
foreach ($products as $product) {
   $key = $product['Price'];
   $items[$key][] = $product['Sku'];
}   

Результат:

Array
(
    [777] => Array
        (
            [0] => 149826761
        )

    [862] => Array
        (
            [0] => 149826762
        )

    [661] => Array
        (
            [0] => 149826763
        )
)

Использование вложенного цикла выполняет работу для любого количества ключей:

<?php
    # The existent data.
    $data = [
        ["Sku" => 149826761, "Price" => 777.00],
        ["Sku" => 149826762, "Price" => 862.00],
        ["Sku" => 149826763, "Price" => 661.00]
    ];

    # Initialise a new array.
    $array = [];

    # Iterate over every associative array in the data array.
    foreach ($data as $element) {
        # Iterate over every key-value pair of the associative array.
        foreach ($element as $key => $value) {
           # Ensure the sub-array specified by the key is set.
           if (!isset($array[$key])) $array[$key] = [];

           # Insert the value in the sub-array specified by the key.
           $array[$key][] = $value;
        }
    }
?>

Ожидаемый результат:

Array (
    [Sku] => Array (
        [0] => 149826761     
        [1] => 149826762
        [2] => 149826763
    )

    [Price] => Array (   
        [0] => 777.00
        [1] => 862.00
        [2] => 661.00
    )
)

Другие вопросы по теме