【问题标题】:How do I print a multidimensional array that varies with depth in php?如何在php中打印随深度变化的多维数组?
【发布时间】:2017-10-02 22:28:45
【问题描述】:

我有以下数组输出示例。我需要找到一种方法将此数组转换为字符串或以有组织的方式输出电子邮件。我试过内爆,但我只收到一个“数组”输出。请帮忙!

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => Email
                )

            [1] => Array
                (
                    [0] => test1@gmail.com
                )

            [2] => Array
                (
                    [0] => test2@gmail.com
                )

            [3] => Array
                (
                    [0] => test3@gmail.com
                )

            [4] => Array
                (
                    [0] => test4@gmail.com
                )

            [5] => Array
                (
                    [0] => test5@gmail.com
                )

        )

)

【问题讨论】:

  • 预期的输出是什么,到目前为止您尝试了什么。
  • 为什么一个数组只有一个元素,而另一个数组有6个数组?如果你控制它,改变它。
  • @Christy 我知道您正在使用 PHPExcel,您是否有机会向我们展示您用于提取的代码的粘贴箱?它会创建这样的输出似乎很奇怪。
  • @JustCarty 它实际上是我正在构建的 Wordpress 插件的一部分。如果你愿意帮忙,我会喜欢另一双眼睛。我的电子邮件是 sparkswebdev@gmail.com。

标签: php arrays string multidimensional-array implode


【解决方案1】:
for ($i = 0; $i < count($arr[0]); $i++) {
    for ($j = 0; $j < count($arr[0][$i]); $j++) {
        echo $arr[0][$i][$j];
    }
}

上面会输出数组的每一个字符串。
我唯一的问题是为什么您将单个字符串存储在数组中这么深?也许我们可以看到更多的代码?

对于您提供的内容,以下代码会更简单:

$arr[] = "Email";
$arr[] = "test1@gmail.com";
$arr[] = "test2@gmail.com";
$arr[] = "test3@gmail.com";
$arr[] = "test4@gmail.com";
$arr[] = "test5@gmail.com";

for ($i = 0; $i < count($arr); $i++) {
    echo $arr[$i];
}

更好的是,使用数组键代替:

$arr["Email"][] = "test1@gmail.com";
$arr["Email"][] = "test2@gmail.com";
$arr["Email"][] = "test3@gmail.com";
$arr["Email"][] = "test4@gmail.com";
$arr["Email"][] = "test5@gmail.com";

for ($i = 0; $i < count($arr["Email"]); $i++) {
    echo $arr["Email"][$i];
}

【讨论】:

  • 你太棒了!这行得通。我正在使用 phpexcel 从导入的 excel 文档中读取一列。使用此代码: $lead_email_array[] = $excelObj->setActiveSheetIndex(0)->rangeToArray($selected_lead_email);
  • @Christy 啊,这可以解释数组开头的流氓“电子邮件”。我很高兴你找到了一个可行的解决方案:)
【解决方案2】:

您可以将数组减少一个级别,然后创建一个foreach 循环,这将允许您组织它们并根据需要打印每个独特的项目。

array_reduce 将使您不必创建第二个循环,并使您的事情变得更容易,同时也减少了计算能力。我是从 here 那里得到的。

<?php
// reduce array
array_reduce($array, 'array_merge', []);
// create the loop
foreach ($array as $k => $v)
{
    // this will print the emails in a list format
    echo '<li>' . $v . '</li>';
}
?>

【讨论】:

    【解决方案3】:

    如果某些数组比其他数组更深,另一种解决方案是使用递归打印函数。这样,它将遍历每个值,如果该值是一个数组,它会使用该新数组 util 重复该过程,它会找到要打印的不是数组的内容。

    $data = array(array(array("Email"),array("some@email.com"),array("another@email.com")),array("outisde@gmail.com"));
    
    function recursivePrint($array) {
        foreach($array as $value) {
            if (gettype($value) === 'array') {
                recursivePrint($value);
            } else {
                print($value . ", ");
            }
        }
    }
    
    recursivePrint($data);
    

    【讨论】:

      【解决方案4】:

      这是您需要使用的唯一数组吗?以后还会有其他这样的阵列吗? Implode 仅适用于同一数组中的兄弟项目,因此您需要类似:

      <?php
      
      $array = array(
        "test1@gmail.com",
        "test2@gmail.com",
        "test3@gmail.com",
        "test4@gmail.com",
        "test5@gmail.com"
      );
      
      $result = implode( ',', $array );
      
      echo $result;
      // test1@gmail.com,test2@gmail.com,test3@gmail.com,test4@gmail.com,test5@gmail.com
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        相关资源
        最近更新 更多