PHP动态多维数组 - 将数据转换为正确的格式

时间:2014-04-28 00:13:18

标签: php arrays format

我在尝试将一系列数据按到第三方服务所需的格式时非常糟糕。我无法改变数据进入函数的方式,因此我需要对其进行操作然后将其发送出去。我设法将它破解成一个几乎正确的状态,除了它只取数组的第一个值并忽略其余的数据。我认为这是因为我覆盖了价值观,但我不知道如何解决它。

我对PHP很陌生,并认为我在这里缺少一些核心数组方法,所以任何输入都会非常感激

数据进入函数($ data)

Array (
    [checkbox_customfield_11363] => Array
        (
            [random unknown string] => Apple
            [random unknown string] => Orange
            [random unknown string] => Banana
        )

    [checkbox_customfield_11339] => Array
        (
            [random unknown string] => Peas
            [random unknown string] => Potatos

        )
)

应将数据按摩为所需格式的功能。第一个foreach循环只删除每个数组名称的第一部分,它按预期工作 - 虽然可能不是最干净的。它是第二个foreach,也是我努力奋斗的下方。

public function createCheckBoxField($data)
{
    $checkbox_matches = array();
    foreach ($data as $key => $value) {
        if (preg_match("/checkbox/", $key)) {
            $newKey = explode('_', $key, 2);
            $checkbox_matches[$newKey[1]] = $value;
        }
    }

    $checkboxes = array();
    foreach ($checkbox_matches as $key1 => $value1) {

        foreach ($value1 as $test) {
            $checkboxes += [$key1 => [["value" => $test]]];
        }
    }
    return $checkboxes;
}

代码当前返回

Array
(
    [customfield_11363] => Array
        (
            [0] => Array
                (
                    [value] => Apple
                )

        )

    [customfield_11339] => Array
        (
            [0] => Array
                (
                    [value] => Peas
                )

        )

)

我需要它回来

Array
(
    [customfield_11363] => Array
        (
            [0] => Array
                (
                    [value] => Apple
                )
            [1] => Array
                (
                    [value] => Orange
                )
            [2] => Array
                (
                    [value] => Banana
                )

        )

    [customfield_11339] => Array
        (
            [0] => Array
                (
                    [value] => Peas
                )
            [1] => Array
                (
                    [value] => Potato
                )

        )

)

2 个答案:

答案 0 :(得分:1)

不确定preg_match等(因为您还没有表明它的意图),但是根据您的输入和所需的输出,这应该有效:

foreach($data as $key => $array) {
    foreach($array as $value) {
        $result[$key][] = array('value' => $value);
    }
}

答案 1 :(得分:0)

为什么只看到第一个元素的问题是因为你在这一行中使用的数组联合运算符:

$checkboxes += [$key1 => [["value" => $test]]];

因为$checkboxes在每次迭代中都包含密钥$key1但是第一次,所以它不会被覆盖。使用数组联合,左边的键胜出。

而是推入阵列:

$checkboxes[$key1][] = ["value" => $test];