【问题标题】:Multi dimensional php array not working多维php数组不起作用
【发布时间】:2018-03-02 02:00:39
【问题描述】:

您好,我正在尝试创建一个多维数组,但遇到了问题。我有一个多维数组,我正在尝试将其他数组推到上面。数组是在数组中创建和推送的。

            $initialChild = $selectorDetailsArray[0];
            $selectorDetailsMultiDimArray = array();
            $multiDimHoldArray = array();

            for($r=0;$r<count($selectorDetailsArray);$r+=3){
                echo "Test vars are ".$selectorDetailsArray[$r]." : ".$initialChild."<br> ";
                if(intval($selectorDetailsArray[$r]) == intval($initialChild)){
                    echo"<br> r is ".$r."<br>";
                    array_push($multiDimHoldArray,$selectorDetailsArray[$r+1],$selectorDetailsArray[$r+2]);
                    echo"<br> values are ".$selectorDetailsArray[$r+1]."  ".$selectorDetailsArray[$r+2]."<br>";
                    print "<pre>";
                    print_r($multiDimHoldArray);
                    print "</pre>";
                }else{
                    array_push($selectorDetailsMultiDimArray,$multiDimHoldArray);
                    $multiDimHoldArray = array();
                    echo "initial child is ".$initialChild."<br>";
                    $initialChild = $selectorDetailsArray[$r];

                    echo "initial child after change is ".$initialChild."<br>";
                }
            }
            print "<pre>";
            print_r($selectorDetailsMultiDimArray);
            print "</pre>";

            exit;

输出是这样的

            Array
            (
                [0] => 65
                [1] => 1
                [2] => 0
                [3] => 65
                [4] => 29
                [5] => 64
                [6] => 66
                [7] => 1
                [8] => 69
                [9] => 66
                [10] => 29
                [11] => 65
            )
            Test vars are 65 : 65

            r is 0

            values are 1 0
            Array
            (
                [0] => 1
                [1] => 0
            )
            Test vars are 65 : 65

            r is 3

            values are 29 64
            Array
            (
                [0] => 1
                [1] => 0
                [2] => 29
                [3] => 64
            )
            Test vars are 66 : 65
            initial child is 65
            initial child after change is 66
            Test vars are 66 : 66

            r is 9

            values are 29 65
            Array
            (
                [0] => 29
                [1] => 65
            )
            Array
            (
                [0] => Array
                    (
                        [0] => 1
                        [1] => 0
                        [2] => 29
                        [3] => 64
                    )

            )

我无法让它推送第二个数组 - 我一定是遗漏了什么?

我已经尝试了所有我能想到的方法,但无法弄清楚为什么第二个数组(已创建)没有被推送到多维数组中。

任何帮助都会很棒

【问题讨论】:

  • 最好展示一个简短的示例来说明原始数组的外观以及所需的数组应该是什么 - 因为很难准确地说明您在做什么。跨度>
  • 原始数组是显示的具有 12 个条目的数组,所需的输出是具有两个数组的多维数组,其中一个显示为例如1、0、29、64 和另一个 1、69、29、65 所以我使用第一个数字 0、3、6 等作为索引 - 最初是 65,然后是 66 来创建两个数组,然后推送它们将两个数组放到多维数组上
  • 从提供的日志中可以清楚地看出else 部分从未被执行(因为没有消息nitial child is...initial child after change is)。你想在if(intval($selectorDetailsArray[$r]) == intval($initialChild))做什么?
  • 它确实去了 else。我已经检查过了。初始数组包含 12 个条目。该数组是 4 批三个值。第一个值是 65 或 66。这定义了以下值应该进入哪个数组。因此代码循环遍历 12 个条目数组,查看第一个值。如果它是 65,那么它将以下两个值推送到一个数组中。当它达到 66 值时,它将数组保存到多数组中并开始创建一个新数组

标签: php arrays multidimensional-array


【解决方案1】:

不确定代码的总体用途是“确切”,但我确实理解您试图获得的结果,并且我也理解它为什么不起作用。我已经评论了我的代码,所以你应该能够看到它在做什么。我首先在代码中创建了一个数组,但我认为它适用于你得到的任何数组,即使你没有展示它是如何生成的。

$selectorDetailsArray = Array(65,1,0,65,29,64,66,1,69,66,29,65);

$initialChild = $selectorDetailsArray[0];
$selectorDetailsMultiDimArray = array();
$multiDimHoldArray = array();
$loopstrings = array(" :: 1st loop :: "," :: 2nd loop :: "," :: 3rd loop :: "," :: 4th loop :: ");
$loop = 0;
$dim = 0;

for($r=0;$r<count($selectorDetailsArray);$r+=3){
    echo "<br>START".$loopstrings[$loop]."<br>";
    echo "Test vars are ".$selectorDetailsArray[$r]." : ".$initialChild."<br> ";
    if(intval($selectorDetailsArray[$r]) == intval($initialChild)){
        echo"<br> r is ".$r."<br>";
        array_push($multiDimHoldArray,$selectorDetailsArray[$r+1],$selectorDetailsArray[$r+2]);
        echo"<br> values are ".$selectorDetailsArray[$r+1]."  ".$selectorDetailsArray[$r+2]."<br>";
    }else{
        array_push($selectorDetailsMultiDimArray,$multiDimHoldArray);
        $multiDimHoldArray = array();
        // This needs to be here because the "if" is not run during this loop...
        array_push($multiDimHoldArray,$selectorDetailsArray[$r+1],$selectorDetailsArray[$r+2]);
        echo "initial child is ".$initialChild."<br>";
        $initialChild = $selectorDetailsArray[$r];
        echo "initial child after change is ".$initialChild." -- ($ r = $r)<br>";
    }
    echo "<br>END".$loopstrings[$loop++]."<br>";
}
// We push one last time since it successfully pushed twice more in the "if" but never ran the "else" a final time...
array_push($selectorDetailsMultiDimArray,$multiDimHoldArray);
echo "<br>";
echo "<br>BEGIN OUTPUT<br>";
print "<pre>";
print_r($selectorDetailsArray);
print_r($multiDimHoldArray);
print_r($selectorDetailsMultiDimArray);
print "</pre>";

这是我的代码生成的输出。我添加了几行使其可读,并在最后输出所有数组:

    START :: 1st loop ::
    Test vars are 65 : 65

    r is 0

    values are 1 0

    END :: 1st loop ::

    START :: 2nd loop ::
    Test vars are 65 : 65

    r is 3

    values are 29 64

    END :: 2nd loop ::

    START :: 3rd loop ::
    Test vars are 66 : 65
    initial child is 65
    initial child after change is 66 -- ($ r = 6)

    END :: 3rd loop ::

    START :: 4th loop ::
    Test vars are 66 : 66

    r is 9

    values are 29 65

    END :: 4th loop ::


    BEGIN OUTPUT

    Array
    (
        [0] => 65
        [1] => 1
        [2] => 0
        [3] => 65
        [4] => 29
        [5] => 64
        [6] => 66
        [7] => 1
        [8] => 69
        [9] => 66
        [10] => 29
        [11] => 65
    )
    Array
    (
        [0] => 1
        [1] => 69
        [2] => 29
        [3] => 65
    )
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => 0
                [2] => 29
                [3] => 64
            )

        [1] => Array
            (
                [0] => 1
                [1] => 69
                [2] => 29
                [3] => 65
            )

    )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 2013-03-11
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    相关资源
    最近更新 更多