繁体   English   中英

多维阵列到单个

[英]Multidimensionnal array to single one

在使用 ajax 和 PHP 构建表单时,我正在努力处理多维数组。 我的 ajax 向 php 发送一个多维数组。 我想将此数组转换为一维数组。

所以考虑这段代码:

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

其中 output 这个:

    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);

Output 这个:

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

}

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

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

我想要类似的东西:数组(id => 原因,id => 原因等......)

像这样的东西

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

您可以使用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);

Output:

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

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

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

暂无
暂无

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

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