【问题标题】:Cannot seem to loop through nested associative array似乎无法循环嵌套关联数组
【发布时间】:2013-09-25 09:55:50
【问题描述】:

我用谷歌搜索无济于事,我错过了一些我看不到的基本内容。

我有以下数组

$this->links = array (
  0 => 
  array (
    'url' => 'http://maps.doc.govt.nz/Viewer/Index.html?viewer=rwa',
    'text' => 'DOC maps: Discover the outdoors ',
  ),
  1 => 
  array (
    'url' => 'https://booking.doc.govt.nz/',
    'text' => ' ',
  ),
  2 => 
  array (
    'url' => 'https://booking.doc.govt.nz/',
    'text' => ' Book Great Walks, selected huts, campsites and more.  ',
  ),
  3 => 
  array (
    'url' => 'https://careers.doc.govt.nz/jobtools/jncustomsearch.searchResults?in_organid=18174&in_searchBut=Search',
    'text' => 'Jobs at DOC ',
  ),
  4 => 
  array (
    'url' => 'http://blog.doc.govt.nz/',
    'text' => ' Conservation blog ',
  )....

我正在尝试用这个循环遍历它

foreach ($this->links as $arrayId) 
            {
            print "Link {\n";
            foreach ($arrayId as $linktitle=>$linkdetail)
                {
                echo 'link: -'.$linktitle .'<br/> bit'.$linkdetail;
                }
            }

但我收到警告:foreach() 错误提供的参数无效。我真的不知道为什么它不起作用,我也尝试了我能想到的每一个变化?仍然遇到同样的错误?

更新我转储变量并且 $links 被描述为一个数组但是当我添加一个 is_array 条件时它返回 false??????

        var_dump($links); 

- string 'array (
  0 => 
  array (
    'url' => 'http://www.iana.org/domains/example',
    'text' => 'More information... ',

if (is_array($links))
{
    echo "Its an array";

} - does not return 

【问题讨论】:

  • $this 是指对象或类,它在哪里?
  • $这是我的课(视图)。我删除了 $this 但仍然遇到同样的错误
  • 你的变量 $linksstring 不是 array

标签: php foreach associative-array


【解决方案1】:

您的$this-&gt;links 是一个字符串。你需要它是一个数组。如果您无法更改要生成它的数组,则可以尝试以下操作。我不推荐使用eval(),只能在不得已的情况下使用。

$alinks=array();
eval('$alinks='.$this->links.';');
foreach ($alinks as $arrayId) 
        {
        print "Link {\n";
        foreach ($arrayId as $linktitle=>$linkdetail)
            {
            echo 'link: -'.$linktitle .'<br/> bit'.$linkdetail;
            }
        }

警告:eval() 语言结构非常危险,因为它允许执行任意 PHP 代码。 因此不鼓励使用它。如果您已仔细验证除了使用此构造之外别无选择,请特别注意不要将任何用户提供的数据传递给它事先正确验证。

http://php.net/manual/en/function.eval.php

【讨论】:

  • AAaaargh 我使用 var_export 来回显转储,但我完全忘记了它。
【解决方案2】:

代码看起来没问题,但生成 $this->links 值的代码可能会错误地执行此操作。尝试在第一个 foreach 之前执行 $this->links 的 print_r 或 var_dump,然后在第二个 foreach 之前对 $arrayId 执行相同的操作,它可能会向您显示导致问题的原因。我唯一能想到的是 $this->links 实际上并不是一个数组,因为以前没有为它生成数据或没有正确分配它。

【讨论】:

  • 谢谢,但我可以很好地 var_dump 数组
【解决方案3】:

如果您不使用课程,请删除 egig 提到的 $this,然后尝试以下操作:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('log_errors', 0);

$links = array (
  0 =>
  array (
    'url' => 'http://maps.doc.govt.nz/Viewer/Index.html?viewer=rwa',
    'text' => 'DOC maps: Discover the outdoors ',
  ),
  1 =>
  array (
    'url' => 'https://booking.doc.govt.nz/',
    'text' => ' ',
  ),
  2 =>
  array (
    'url' => 'https://booking.doc.govt.nz/',
    'text' => ' Book Great Walks, selected huts, campsites and more.  ',
  ),
  3 =>
  array (
    'url' => 'https://careers.doc.govt.nz/jobtools/jncustomsearch.searchResults?in_organid=18174&in_searchBut=Search',
    'text' => 'Jobs at DOC ',
  ),
  4 =>
  array (
    'url' => 'http://blog.doc.govt.nz/',
    'text' => ' Conservation blog ',
  )
);

foreach ($links as $arrayId)
{
        print "Link {\n";
        foreach ($arrayId as $linktitle=>$linkdetail)
        {
                echo 'link: -'.$linktitle .'<br/> bit'.$linkdetail;
        }
}
?>

【讨论】:

  • 谢谢,但我删除了 $this 并添加了错误报告,但仍然收到相同的错误。我做了一个 var_dump 将我的打印从数组中取出,所以它渲染得很好?
  • @redstubble:你能发布整个数组吗?
【解决方案4】:

试试这个

<?php
$this->links = array (
  0 => 
  array (
    'url' => 'http://maps.doc.govt.nz/Viewer/Index.html?viewer=rwa',
    'text' => 'DOC maps: Discover the outdoors ',
  ),
  1 => 
  array (
    'url' => 'https://booking.doc.govt.nz/',
    'text' => ' ',
  ),
  2 => 
  array (
    'url' => 'https://booking.doc.govt.nz/',
    'text' => ' Book Great Walks, selected huts, campsites and more.  ',
  ),
  3 => 
  array (
    'url' => 'https://careers.doc.govt.nz/jobtools/jncustomsearch.searchResults?in_organid=18174&in_searchBut=Search',
    'text' => 'Jobs at DOC '
  ));

echo "<pre>";

for($i=0;$i<=count($this->links)-1;$i++)
{
    foreach($this->links[$i] as $value)
    {
        print_r($value);
        echo "<br>";


    }
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 2022-05-12
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多