Php 更改多维数组的结构

Php 更改多维数组的结构,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一些创建多维数组的代码,但我的结果似乎是一个数组数组,这不是我想要的。我想把这个阵列展平。如何更改此数组结果: Array ( [0] => Array ( [0] => Array ( [2011-11-18 00:00:00] => C ) [1] => Array

我有一些创建多维数组的代码,但我的结果似乎是一个数组数组,这不是我想要的。我想把这个阵列展平。如何更改此数组结果:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [2011-11-18 00:00:00] => C
                )

            [1] => Array
                (
                    [2011-11-18 00:00:00] => I
                )

            [2] => Array
                (
                    [2011-11-18 00:00:00] => S
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [2011-11-22 00:00:00] => C
                )

            [1] => Array
                (
                    [2011-11-22 00:00:00] => S
                )

        )

)
不是“数组数组”的东西?以下是创建数组数组的代码:

$qrybilled = $this->db->query("SELECT tbltc.BILLED FROM tbltc WHERE tbltc.PN = $pn AND tbltc.Y = $taxyear AND tbltc.SCENARIO = $scenario GROUP BY BILLED");
$x = 0; $arr_billed = array();

foreach ($qrybilled->result() as $row) {
$qry = $this->db->query("SELECT tbltc.BILLED, tbltc.TC, tbltc.CAT FROM tbltc WHERE tbltc.PN = $pn AND tbltc.Y = $taxyear AND tbltc.SCENARIO = $scenario AND tbltc.BILLED = '".$row->BILLED."' GROUP BY TC");

    $tmp = array();
    foreach ($qry->result() as $row) {      
        $tmp[] = array( $row->BILLED => $row->TC);
    }
    $arr_billed[] = $tmp; 

}
$data['billed'] = $arr_billed; 
如果您可以建议一种更好的方法来构建阵列,使其不是“阵列阵列”,那就太好了。谢谢你的帮助

  • 编辑-
NickB的答案对我来说非常有效,并产生了以下输出,这正是我想要的:

Array
(
    [2011-11-18 00:00:00] => Array
        (
            [0] => C
            [1] => I
            [2] => S
        )

    [2011-11-22 00:00:00] => Array
        (
            [0] => C
            [1] => S
        )

)

可以循环遍历数组中的所有条目以创建新数组

$result = array();

foreach( $array as $inner_array)
{
    foreach( $inner_array as $entry)
    {
        foreach( $entry as $key => $value)
        {
            $result[ $key ][] = $value;
        }
    }
}
输出:

array(2) {
  ["2011-11-18 00:00:00"]=>
  array(3) {
    [0]=>
    string(1) "C"
    [1]=>
    string(1) "I"
    [2]=>
    string(1) "S"
  }
  ["2011-11-22 00:00:00"]=> 
  array(2) {
    [0]=>
    string(1) "C"
    [1]=>
    string(1) "S"
  }
}

可以循环遍历数组中的所有条目以创建新数组

$result = array();

foreach( $array as $inner_array)
{
    foreach( $inner_array as $entry)
    {
        foreach( $entry as $key => $value)
        {
            $result[ $key ][] = $value;
        }
    }
}
输出:

array(2) {
  ["2011-11-18 00:00:00"]=>
  array(3) {
    [0]=>
    string(1) "C"
    [1]=>
    string(1) "I"
    [2]=>
    string(1) "S"
  }
  ["2011-11-22 00:00:00"]=> 
  array(2) {
    [0]=>
    string(1) "C"
    [1]=>
    string(1) "S"
  }
}

当您在同一数组中多次使用同一个键时,可以返回一个更简单(但仍然是嵌套的)结构(一些语言称之为对的列表)

假设您的数据被称为
$data

$compactData = array();
array_walk_recursive($data, function($value, $key) use (&$compactData) {
    $compactData[] = array($key, $value);
});

print_r($compactData);
印刷品:

Array
(
    [0] => Array
        (
            [0] => 2011-11-18 00:00:00
            [1] => C
        )

    [1] => Array
        (
            [0] => 2011-11-18 00:00:00
            [1] => I
        )

    [2] => Array
        (
            [0] => 2011-11-18 00:00:00
            [1] => S
        )

    [3] => Array
        (
            [0] => 2011-11-22 00:00:00
            [1] => C
        )

    [4] => Array
        (
            [0] => 2011-11-22 00:00:00
            [1] => S
        )

)

当您在同一数组中多次使用同一个键时,可以返回一个更简单(但仍然是嵌套的)结构(一些语言称之为对的列表)

假设您的数据被称为
$data

$compactData = array();
array_walk_recursive($data, function($value, $key) use (&$compactData) {
    $compactData[] = array($key, $value);
});

print_r($compactData);
印刷品:

Array
(
    [0] => Array
        (
            [0] => 2011-11-18 00:00:00
            [1] => C
        )

    [1] => Array
        (
            [0] => 2011-11-18 00:00:00
            [1] => I
        )

    [2] => Array
        (
            [0] => 2011-11-18 00:00:00
            [1] => S
        )

    [3] => Array
        (
            [0] => 2011-11-22 00:00:00
            [1] => C
        )

    [4] => Array
        (
            [0] => 2011-11-22 00:00:00
            [1] => S
        )

)

你不能多次使用同一个索引。我相信@BookOfZeus意味着你不能多次使用同一个索引。@nickb是的,你是对的,我这边拼写错误谢谢你为什么不想要一个二维数组?二维阵列是相当标准的。你应该使用它,而不是反对它。那,我们需要看看你的代码来告诉你如何修复它。你不能多次拥有相同的索引。我相信@BookOfZeus意味着你不能多次拥有相同的索引。@nickb是的,你是对的,我这边拼写错误谢谢你为什么不想要一个二维数组?二维阵列是相当标准的。你应该使用它,而不是反对它。这一点,我们需要看到你的代码来告诉你如何修复它。谢谢亚当。我没有考虑过以这种方式查看我的数据,但我知道您来自哪里。这就是你所说的2d阵列吗?谢谢亚当。我没有考虑过以这种方式查看我的数据,但我知道您来自哪里。这就是所谓的二维阵列吗?