【问题标题】:Multidimensionnal array to single one多维数组转单
【发布时间】:2021-02-23 10:18:21
【问题描述】:

我在使用 ajax 和 PHP 构建表单时遇到了多维数组。 我的 ajax 向 php 发送一个多维数组。我想将此数组转换为一维数组。

所以考虑这段代码:

$reasons = $_POST['reasons'];
var_dump($reasons);

哪个输出这个:

    array(1) {
      [0]=>
        array(2) {
          ["id"]=>
            string(2) "37"
          ["reason"]=>
            string(9) "Something"
        }
   }

我现在希望它是这样的:

$reasons = {
  37 => "Something"
}

我该怎么做? 我已经搜索了几个小时,但没有找到合适的解决方案......

我尝试过的:

1)

function array_flatten($array) { 

    if (!is_array($array)) {
      return FALSE; 

    }

    $reasons = array(); 

    foreach ($array as $key => $value) { 

      if (is_array($value)) { 

        $reasons = array_merge($reasons, array_flatten($value)); 

      } else { 
        
        $reasons[$key] = $value; 
      
        }

    }

    return $reasons;

}

array_flatten($_POST['reasons']);

var_dump($reasons);

Output: NULL
$reasons = $_POST['reasons'];

$tabReasons = array_reduce($reasons, 'array_merge', array());

var_dump($tabReasons);

输出这个:

array(2) {
  ["id"]=>
    string(2) "37"
  ["reason"]=>
    string(9) "Parce que"

}

哪种工作,但我的多维数组可以存储多个 ID 和原因。发生这种情况时,上面的代码只返回一对键和值

如果我的多维中有两个 id 和两个原因,它只会将我最后一个 id 和原因返回到一个数组中......

我想要类似:array(id => reason, id => reason, etc...)

【问题讨论】:

  • 这能回答你的问题吗? Convert multidimensional array into single array
  • 我已经搜索了几个小时,但没有找到合适的解决方案...请发布您的代码,您尝试了什么?
  • 我用我尝试过的所有内容编辑了代码,并进一步解释了我想要做什么

标签: php arrays post


【解决方案1】:

您可以使用array_column() 提取列的线性数据,并使用array_combine() 将它们组合为键/值。

$reasons = [
    ['id' => 37, 'reason' => 'something'],
    ['id' => 38, 'reason' => 'something else'],
];
      
$indexed = array_combine(array_column($reasons, 'id'), array_column($reasons, 'reason'));

print_r($indexed);

输出:

Array
(
    [37] => something
    [38] => something else
)

【讨论】:

    【解决方案2】:

    类似的东西

     function array_flatten($data) { 
             $res=array();
             foreach ($data as $val) { 
                $res[$val['id']] =$val['reason'];
            }
            return $res;
        }
    

    【讨论】:

    • 你这是什么意思?请在您的答案中添加一些解释,以便其他人可以从中学习
    【解决方案3】:

    不确定您的数据是否比此处显示的更复杂,但从提供的数据来看,这很简单。

    $result = [
        $reasons[0]['id'] => $reasons[0]['reason']
    ];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 2016-02-05
      • 2015-12-24
      相关资源
      最近更新 更多