Установить ключ и значение в объекте многомерного массива в PHP - PullRequest
0 голосов
/ 30 августа 2018

Все, что мне нужно, это добавить [флажок] => 1 в некоторые массивы при условии: У меня есть переменная, и я хочу сравнить ее со значением name. Пример: если моя переменная совпадает с Display или Forwarding, тогда необходимо вставить новый ключ и значение.

Кто-нибудь может сказать мне, как это сделать? Я хочу напрямую перейти к определенному индексу, например, к 0 или 1, или к любому индексу массива объектов и хочу вставить новый ключ и значение, например, [проверено] => 1

   Array
        (
            [Call xyz] => Array
                (
                    [features] => Array
                        (
                            [0] => Array
                                (
                                    [name] => Display
                                    [display] => webxxx
                                    [category] => x
                                    [uniq_id] => x
                                )

                            [1] => Array
                                (
                                    [name] => Forwarding
                                    [display] => webxxx
                                    [category] => x
                                    [uniq_id] => x
                                )
                        )
               )
           [Hidden] => Array
               (
                   [features] => Array
                      (
                         [0] => Array
                            (
                                [name] => XYZ
                                [display] => webxxx
                                [category] => x
                                [uniq_id] => x
                        )

                        [1] => Array
                          (
                               [name] => ABC
                               [display] => webxxx
                               [category] => x
                               [uniq_id] => x
                          )
                   )
             )

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Возможно, вы могли бы использовать foreach, проверить, существует ли ключ / индекс в массиве, и проверить значения для «имени». Если это соответствует, добавьте [флажок] => 1:

$index = 1;
foreach ($arrays as &$array) {
    if (array_key_exists($index, $array["features"]) &&
        ($array["features"][$index]["name"] === "Display" || $array["features"][$index]["name"] === "Forwarding")
    ) {
        $array["features"][$index]["checked"] = 1;
    }
}

Демо

0 голосов
/ 30 августа 2018

Вам потребуется получить доступ к самому нижнему подрешетке, где находится клавиша name. Клавиши первого уровня: Call xyz и Hidden. Подмассивы второго уровня имеют ключ features. Третий уровень имеет индексированные ключи. name - это ассоциативный ключ на четвертом уровне.

После того, как вы доберетесь до четвертого уровня, вы можете кратко написать in_array() в своем состоянии, чтобы проверить, соответствует ли нижняя строка данных для получения нового элемента checkbox => 1. (В качестве альтернативы вы могли бы опустить вызов in_array() и использовать: $set3["name"] == "Display" || $set3["name"] == "Forwarding", но это более многословно и уродливее для увеличения.)

Код: ( Демо )

$array = [
    "Call xyz" => [
        "features" => [
            ["name" => "Display", "display" => "webxxx", "category" => "x", "uniq_id" => "x"],
            ["name" => "Forwarding", "display" => "webxxx", "category" => "x", "uniq_id" => "x"]
        ]
    ],
    "Hidden" => [
        "features" => [
            ["name" => "XYZ", "display" => "webxxx", "category" => "x", "uniq_id" => "x"],
            ["name" => "ABC", "display" => "webxxx", "category" => "x", "uniq_id" => "x"]
        ]
    ]
];

$whitelist = ["Display", "Forwarding"];

foreach ($array as $key1 => $set1) {
    foreach ($set1 as $key2 => $set2) {
        foreach ($set2 as $key3 => $set3) {
            if (in_array($set3["name"], $whitelist)) {
                $array[$key1][$key2][$key3]["checkbox"] = 1;    
            }
        }
    }
}

var_export($array);

Выход:

array (
  'Call xyz' => 
  array (
    'features' => 
    array (
      0 => 
      array (
        'name' => 'Display',
        'display' => 'webxxx',
        'category' => 'x',
        'uniq_id' => 'x',
        'checkbox' => 1,
      ),
      1 => 
      array (
        'name' => 'Forwarding',
        'display' => 'webxxx',
        'category' => 'x',
        'uniq_id' => 'x',
        'checkbox' => 1,
      ),
    ),
  ),
  'Hidden' => 
  array (
    'features' => 
    array (
      0 => 
      array (
        'name' => 'XYZ',
        'display' => 'webxxx',
        'category' => 'x',
        'uniq_id' => 'x',
      ),
      1 => 
      array (
        'name' => 'ABC',
        'display' => 'webxxx',
        'category' => 'x',
        'uniq_id' => 'x',
      ),
    ),
  ),
)
0 голосов
/ 30 августа 2018

Это довольно просто. Учитывая, что вы знаете, какой ключ массива $index нужно изменить:

$array['Call xyz']['features'][$index]['checked'] = 1;
...