【问题标题】:assigning and echoing values for multidimensional arrays in php在 php 中为多维数组分配和回显值
【发布时间】:2017-10-25 17:16:58
【问题描述】:

如果我手动设置值,我有一个多维数组,但如果我尝试动态设置值,则它不起作用。

这是我手动设置数组值时有效的代码:

<?php

//testing creation and output of a multidimensional array
$evt = array("BATT","MGAP","BSTR");
$st = array("Document","Enrollee","Agent","Other");
$ord = array(1,3,2,4);
$prt = array(
  array('evt'=>"BATT",'st'=>"Document",'ord'=>1),
  array('evt'=>"BATT",'st'=>"Enrollee",'ord'=>3),
  array('evt'=>"BATT",'st'=>"Agent",'ord'=>2),
  array('evt'=>"BATT",'st'=>"Other",'ord'=>4),
  array('evt'=>"MGAP",'st'=>"Document",'ord'=>1),
  array('evt'=>"MGAP",'st'=>"Enrollee",'ord'=>3),
  array('evt'=>"MGAP",'st'=>"Agent",'ord'=>2),
  array('evt'=>"MGAP",'st'=>"Other",'ord'=>4),
);

$keys = array_keys($prt);
for ($x=0;$x<count($keys);$x++) {
    echo "UNSORTED: prt key is " . $keys[$x] . "{<br>";
    foreach ($prt[$keys[$x]] as $key=> $value) {
        echo $key . " : " . $value . "<br>";
    }

    echo "}<br>";
}
?>

这是尝试动态设置值时不起作用的代码:

<?php

//testing creation and output of a multidimensional array
$evt = array("BATT","MGAP","BSTR");
$st = array("Document","Enrollee","Agent","Other");
$ord = array(1,3,2,4);    
$prt = array();

for ($x=0;$x<count($evt);$x++) {
    for ($y=0;$y<count($st);$y++) {
        $prt[$x][$y] = array('evt'=>$evt[$x],'st'=>$st[$y],'ord'=>$ord[$y]);
        echo "evt[".$x."] is set to " . $evt[$x] . " and st[".$y."] is set to " . $st[$y] . " and ord[".$y."] is set to " . $ord[$y] . "<br>";
    }
}

$keys = array_keys($prt);
for ($x=0;$x<count($keys);$x++) {
    echo "UNSORTED: prt key is " . $keys[$x] . "{<br>";
    foreach ($prt[$keys[$x]] as $key=> $value) {
        echo $key . " : " . $value . "<br>";
    }

    echo "}<br>";
}
?>

基于 for $y 循环中的 echo 语句,我得到了正确的值,但由于某种原因我没有正确存储它,或者使用 $key=>$value 的 foreach 循环不起作用,我不知道是哪个。我已经寻找各种解决方案来尝试动态设置数组,然后再次动态访问它,似乎无法让它按预期工作。希望大家帮忙,谢谢!

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    改变这一行

    $prt[$x][$y] = array('evt'=>$evt[$x],'st'=>$st[$y],'ord'=>$ord[$y]);
    

    到这里:

    $prt[] = array('evt'=>$evt[$x],'st'=>$st[$y],'ord'=>$ord[$y]);
    

    $ptr 应该是一个“平面”数组。在原始代码行中,您实际创建的是一个多维数组,它无法按预期工作。

    【讨论】:

    • 不客气。如果对您有帮助,请采纳答案。
    • 赞成是的,这是根据 OP 问题的问题,但是 OP 为什么不直接使用 foreach() 而不是使用外部 for 循环然后 foreach() 这不是一个好习惯跨度>
    • 不确定如何接受答案,但 Jose 是对的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    相关资源
    最近更新 更多