【问题标题】:PHP dynamic multidimensional arrays - getting data into the right formatPHP 动态多维数组 - 将数据转换为正确的格式
【发布时间】:2014-06-13 09:08:59
【问题描述】:

我在尝试将一组数据转换为第三方服务所需的格式时遇到了麻烦。我无法更改数据进入函数的方式,因此我需要对其进行操作然后将其发送出去。我已经设法将其破解为几乎正确的状态,除了它只取数组的第一个值而忽略其余部分。我认为这是因为我正在覆盖这些值,但我不知道如何解决它。

我对 PHP 很陌生,我认为我在这里缺少一些核心数组方法或其他东西,所以任何输入都将不胜感激

进入函数的数据($data)

大批 ( [checkbox_customfield_11363] => 数组 ( [随机未知字符串] => 苹果 [随机未知字符串] => 橙色 [随机未知字符串] => 香蕉 ) [checkbox_customfield_11339] => 数组 ( [随机未知字符串] => 豌豆 [随机未知字符串] => 土豆 ) )

应该将数据转换为所需格式的函数。第一个 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;
}

代码当前返回

大批 ( [customfield_11363] => 数组 ( [0] => 数组 ( [价值] => 苹果 ) ) [customfield_11339] => 数组 ( [0] => 数组 ( [价值] => 豌豆 ) ) )

我需要它返回

大批 ( [customfield_11363] => 数组 ( [0] => 数组 ( [价值] => 苹果 ) [1] => 数组 ( [值] => 橙色 ) [2] => 数组 ( [价值] => 香蕉 ) ) [customfield_11339] => 数组 ( [0] => 数组 ( [价值] => 豌豆 ) [1] => 数组 ( [价值] => 马铃薯 ) ) )

【问题讨论】:

  • 您没有提供输入数据。如果您在 stackoverflow 上提问,请使用尽可能少的代码从头开始创建示例,以演示包含所有数据以重现问题的问题。
  • 第一个代码块是输入数据。
  • 第一个代码块根本就没有代码。这是一个语法错误。它也没有正确指定输入数组,因为它不明确。
  • 这不是语法错误,它是无法修改的值 $data 的转储 (print_r)。 $data 是输入数据。
  • print_r 不会以无语法错误的方式输出,var_export 会。接下来,这是 not prin_r 输出,您对其进行了编辑,使其无法使用。但是您似乎对学习有抵抗力,以至于您对我的 cmets 承担所有坏事。你或许应该想想我为什么要发表评论。

标签: php arrays format


【解决方案1】:

不确定preg_match 等(因为您还没有展示它的用途),但考虑到您的输入和所需的输出,这应该可以工作:

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

【讨论】:

    【解决方案2】:

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

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

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

    改为推入数组:

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

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 2015-11-17
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      相关资源
      最近更新 更多