PHP表创建(多维数组)



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

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

try array_fill_keys() function

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

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

这只是为了构建与您的

类似的数组
$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);

将保证与上面相同的输出

相关内容

  • 没有找到相关文章

最新更新