PHP表创建(多维数组)

时间:2014-06-19 02:29:27

标签: php sorting multidimensional-array

我有4个数组,第一个是表格标题,其中有六个:

array(6) {
    [0]=> string(3) "Who",
    [1]=> string(4) "What",
    [2]=> string(4) "When",
    [3]=> string(5) "Where",
    [4]=> string(3) "Why",
    [5]=> string(3) "How"
}

和其他3个包含重合值的数组。我想要做的是取第一个数组的值是使它们成为另一个数组的键,其值为array,如下所示:

array(6) {
    ["Who"]=> array(0) {},
    ["What"]=> array(0) {},
    ["When"]=> array(0) {},
    ["Where"]=> array(0) {},
    ["Why"]=> array(0) {},
    ["How"]=> array(0) {}
}

然后使用重合值填充这些数组,就像表一样。其他一个数组的一个例子是:

array(6) {
    [0]=> string(3) "red",
    [1]=> string(4) "blue",
    [2]=> string(4) "green",
    [3]=> string(6) "yellow",
    [4]=> string(3) "black",
    [5]=> string(3) "white"
}

为了简单起见,我要说所有3个数组都具有与上面完全相同的值。

最后我希望得到的数组是:

array(6) {
    ["Who"]=> array(3) {
        [0]=> string(3) "red",
        [1]=> string(3) "red",
        [2]=> string(3) "red"
    },
    ["What"]=> array(3) {
        [0]=> string(4) "blue",
        [1]=> string(4) "blue",
        [2]=> string(4) "blue"
    },
    ["When"]=> array(3) {
        [0]=> string(5) "green",
        [1]=> string(5) "green",
        [2]=> string(5) "green"
    },
    ["Where"]=> array(3) {
        [0]=> string(6) "yellow",
        [1]=> string(6) "yellow",
        [2]=> string(6) "yellow"
    },
    ["Why"]=> array(3) {
        [0]=> string(5) "black",
        [1]=> string(5) "black",
        [2]=> string(5) "black"
    },
    ["How"]=> array(3) {
        [0]=> string(5) "white",
        [1]=> string(5) "white",
        [2]=> string(5) "white"
    }
}

我目前使用的代码如下:

... //Tokens are generated above (this is all in a loop)
foreach ($tokens as $token) {
    if ($i == 0) {
        $table[$token] = array();
    } else {
        foreach ($table as $col) {
            $table[$col][$i] = $token;
        }
    }
}
$i = $i + 1;

所有这些生成都是array(0) {}

如果有人能指出我的逻辑缺陷,我们将不胜感激。

编辑:

这是表格的样子:

_________________________________________
| Who | What | When | Where | Why | How |
-----------------------------------------
| red | blue | green| yellow|black|white|
-----------------------------------------
| red | blue | green| yellow|black|white|
-----------------------------------------
| red | blue | green| yellow|black|white|
-----------------------------------------

2 个答案:

答案 0 :(得分:0)

我对你的问题得出了一个结论,如下所示:

这只是为了构建类似于你的数组

$one = array(
        0 => 'Who',
        1 => 'What',
        2 => 'When',
        3 => 'Where',
        4 => 'Why',
        5 => 'How'
    );



    $der = array();
    for ($i = 0; $i < 3; $i++) {
        $array = array(
            0 => 'red',
            1 => 'blue',
            2 => 'green',
            3 => 'yellow',
            4 => 'black',
            5 => 'white'
        );
        array_push($der, $array);
    }

我基本上创建了一个多维数组($der),而不是您必须完成此任务的3个单独的数组值。

您可以使用array_push()创建新阵列。

现在我们需要循环遍历$der数组,同时保留$one数组中的键(表标题)。

    $new = array();
    foreach($der as $item) {

        foreach($item as $key => $val) {
            $new[$one[$key]][] = $val;
        }

    }

print_r($new)保证返回:

Array
(
    [Who] => Array
        (
            [0] => red
            [1] => red
            [2] => red
        )

    [What] => Array
        (
            [0] => blue
            [1] => blue
            [2] => blue
        )

    [When] => Array
        (
            [0] => green
            [1] => green
            [2] => green
        )

    [Where] => Array
        (
            [0] => yellow
            [1] => yellow
            [2] => yellow
        )

    [Why] => Array
        (
            [0] => black
            [1] => black
            [2] => black
        )

    [How] => Array
        (
            [0] => white
            [1] => white
            [2] => white
        )

)

正如您在循环中看到的,我们引用$one[$key],其中$key是您正在迭代的数组项的当前索引。


替代地

您可以执行以下操作(注意下面的$one与上面的$one 相同):

$values = array();
foreach ($der as $item) {

    foreach ($item as $key => $val) {
        $values[$key][] = $val;
    }
}

现在可以使用array_combine()来完成:

$new = array_combine($one, $values);

这将保证与上述相同的输出。

答案 1 :(得分:0)

尝试array_fill_keys()函数

$tokens= array('Who', 'What', 'When', 'Where', 'Why', 'How');
$table = array('red', 'blue', 'green', 'yellow','black', 'white');
$a = array_fill_keys($tokens, $table);
print_r($a);