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

时间:2018-11-29 09:01:40

标签: 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] => 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/>";
  }
}

输出:

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

有人会煽动这些T值来自何处吗?

3 个答案:

答案 0 :(得分:3)

您可以尝试只使用一个foreach吗?我没有尝试过这种解决方案,但是您可以尝试做类似的事情

import pythoncom
import win32com
from win32com.client import Dispatch, constants
#import logging

word_app = win32com.client.gencache.EnsureDispatch("Word.Application")

word_app.Visible = 0
word_app.DisplayAlerts = 0
wc = win32com.client.constants
try:
    word_doc = word_app.Documents.Open('file.pdf')
except pythoncom.com_error as e:
    print(e)
    #logger.info(e)
word_doc.SaveAs(FileName  = 'file.docx', FileFormat = wc.wdFormatXMLDocument)
word_doc.Close(SaveChanges = wc.wdDoNotSaveChanges)

word_app.Quit()

答案 1 :(得分:3)

很明显。您正在尝试使用不存在的字符串索引从第二级数组获取实际值的索引值。

由于任何string can be accessed as an array,不存在的字符串索引被解释为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']);

查看演示:https://eval.in/1063420

输出:

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


T

注意:打开错误报告以简化调试;)How do I get PHP errors to display?

PHP manual Strings(尤其是示例#11和更高版本)中介绍了有关将字符串作为数组访问的更多信息。

答案 2 :(得分:0)

您还可以使用array_column隔离要迭代的部分。

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

https://3v4l.org/YA6Vq