繁体   English   中英

在PHP中的多维数组对象中设置键和值

[英]Set key and value in multi-dimensional array object in PHP

我需要的是在某种条件下在某些数组中添加[checked] => 1:我有一个变量,想将其与'name'的值进行比较。 例如:如果我的变量与“显示”或“转发”匹配,则必须插入新的键和值。

有人可以告诉我该怎么做吗? 我想直接转到特定索引(例如0或1)或要素数组的任何索引,并想要插入新的键和值,例如[checked] => 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
                          )
                   )
             )

也许您可以使用foreach ,检查数组中是否存在键/索引,并检查“名称”的值。 如果匹配,则添加[checked] => 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;
    }
}

演示

您将需要访问name键所在的最低子数组。 第一级键是Call xyzHidden 第二级子数组都以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',
      ),
    ),
  ),
)

这很简单。 既然您知道需要更改哪个数组键$index

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM