Php 遍历数组数组生成不需要的输出

Php 遍历数组数组生成不需要的输出,php,Php,我在PHP中迭代数组时遇到问题 我有以下数组,我已经使用Ajax发布到页面上 Array ( [0] => Array ( [0] => T64 [1] => Array ( [name] => T64 [dummyA] => 2 [dummyB] => 2 [dummyC] => 2 ) ) [1] => Array ( [0] => T65 [1] => Array ( [name] => T65 [dummyA] =&

我在PHP中迭代数组时遇到问题

我有以下数组,我已经使用Ajax发布到页面上

Array ( 
[0] => Array ( [0] => T64 [1] => Array ( [name] => T64 [dummyA] => 2 [dummyB] 
=> 2 [dummyC] => 2 ) ) 
[1] => Array ( [0] => T65 [1] => Array ( [name] => T65 [dummyA] => 2 [dummyB] 
=> 2 [dummyC] => 2 ) ) 
[2] => Array ( [0] => T91 [1] => Array ( [name] => T91 [dummyA] => 2 [dummyB] 
=> 2 [dummyC] => 2 ) ) )
我尝试使用下面的方法打印所有内部值,但是它总是在每个所需值之前打印一个T(在它自己的行上)

foreach($sOptions as $row => $innerArray){
  foreach($innerArray as $innerRow => $value){
    print $value['dummyA'] . "<br/>";
    print $value['dummyB'] . "<br/>";
    print $value['dummyC'] . "<br/>";
  }
}
foreach($sOptions作为$row=>$innerArray){
foreach($innerArray作为$innerRow=>$value){
打印$value['dummyA']。“
”; 打印$value['dummyB']。“
”; 打印$value['dummyC']。“
”; } }
输出:

First character is: T
Second character is: 6
Third character is: 4


T
T
T
T
2
2
2
T
T
T
2
2
2
T
T
T
2
2
2


有没有人能告诉我们这些T值是从哪里来的?

你能试着用一个foreach吗?我没有尝试过这个解决方案,但你可以尝试做类似的事情

foreach($sOptions as $row => $innerArray){
    $value = $innerArray[1]
    print $value['dummyA'] . "<br/>";
    print $value['dummyB'] . "<br/>";
    print $value['dummyC'] . "<br/>";
}
foreach($sOptions作为$row=>$innerArray){
$value=$innerArray[1]
打印$value['dummyA']。“
”; 打印$value['dummyB']。“
”; 打印$value['dummyC']。“
”; }
这是显而易见的。您正试图使用不存在的字符串索引从二级数组中获取实际值的索引值

因为不存在的字符串索引被解释为false,所以它返回第一个值,即作为数组访问的字符串中的零索引字符

在第一种情况下,值T64实际上作为数组('T','6','1')访问,因此它返回
T

<?php

// simple example
// Get the first character of a string
$str = 'T64';
echo "First character is: ". $str[0] .PHP_EOL;
echo "Second character is: ". $str[1] .PHP_EOL;
echo "Third character is: ". $str[2] .PHP_EOL;

echo PHP_EOL;

echo "Applied to your code:". PHP_EOL;
$sOptions = Array ( Array ( 'T64' ) );

print_r($sOptions[0][0]['invalid string index']);
注意:启用错误报告以简化调试;)


有关以数组形式访问字符串的详细信息,请参见esspecialy Example#11及更高版本。

您还可以使用array_列来隔离要迭代的部分

foreach(array_column($arr,1) as $row => $value){
    echo $value['dummyA'] . "\n";
    echo $value['dummyB'] . "\n";
    echo $value['dummyC'] . "\n";
}
这意味着代码将仅迭代以下内容:

array(3) {
  [0]=>
  array(4) {
    ["name"]=>
    string(4) "T64 "
    ["dummyA"]=>
    string(2) "2 "
    ["dummyB"]=>
    string(2) "2 "
    ["dummyC"]=>
    string(2) "2 "
  }
  [1]=>
  array(4) {
    ["name"]=>
    string(3) "T65"
    ["dummyA"]=>
    string(2) "2 "
    ["dummyB"]=>
    string(2) "2 "
    ["dummyC"]=>
    string(1) "2"
  }
  [2]=>
  array(4) {
    ["name"]=>
    string(4) "T91 "
    ["dummyA"]=>
    string(2) "2 "
    ["dummyB"]=>
    string(2) "2 "
    ["dummyC"]=>
    string(2) "2 "
  }
}

我的猜测是,您没有发布与从中获得的输出相同的代码。nah)数据有效,迭代有点错误。应该有一个额外的
foreach
我同意这个额外的foreach,即使有它,输出也不符合正确的PHP错误报告,它会告诉你你做错了什么。我能问一下这条线是怎么工作的吗$值=$innerArray[1]。我不太清楚它在做什么。我简化了代码,取了数组,在数组中循环,对于每个元素,我都保存了子数组的第二部分的值,然后我静态地获取了保存在value中的子数组部分,我认为@ino答案更好,因为它也解释了问题的根本原因-当提供修复时,OP将学到更少的东西。。。