【问题标题】:Passing Array from Controller to View Using CodeIgniter使用 CodeIgniter 将数组从控制器传递到视图
【发布时间】:2017-11-04 11:18:27
【问题描述】:

我正在尝试将一个键编号为 0 到 9 的数组传递给我的视图。但是,当我尝试为所有键回显特定键或 foreach 以显示数据时,什么都没有显示。

我的控制器:

    $i=0;
    $cleanarray = array();

    foreach ($phrase as $innerphrase) {
        if (is_array($innerphrase)) {
            foreach ($innerphrase as $value) {
                $cleanarray[$i] = $value;
                $i++;
            }
        }
    }

    $this->load->view('blogview', $cleanarray);

输出:

Array
(
    [0] => On Friday evenings in Thailand, sandwiched between the evening news and a popular soap opera, is a prime-time programme that has been running for three years, or ever since the military took power in a May 22, 2014 coup. 
    [1] => The Reds pulled off their biggest comeback in a year to finally end their pesky losing streak.
    [2] => A co-founder of Twitter says he's sorry if the popular social media platform helped put Donald Trump in the White House, as the president has suggested.
    [3] => Daniel Suarez is thrilled to be competing in the NASCAR All-Star race after struggling in his rookie season.
    [4] => Lexi Thompson remained in position for her first victory since a rules infraction cost her a major title, shooting a 2-under 69 in tricky wind conditions Saturday to take a three-stroke lead over In Gee Chun into the final round of the Kingsmill Championship.
    [5] => Boston Celtics guard Isaiah Thomas will miss the remainder of the NBA playoffs after aggravating a hip injury during Game Two of the Eastern Conference final, the team announced on Saturday.
    [6] => Yankees manager Joe Girardi has been ejected during an animated argument and New York pitching coach Larry Rothschild and Tampa Bay starter Matt Andriese also have been tossed in a testy game at Tropicana Field.
    [7] => Ed Carpenter turned a tough draw into a winning hand Saturday.
    [8] => Cloud Computing pulled off a major surprise in the Preakness Stakes in Maryland on Saturday, charging down the stretch to overtake Classic Empire and win the second race of U.S. thoroughbred racing's Triple Crown.
    [9] => Sometimes it pays to have a fresh horse.
)

我的看法:

<html>
<head>
</head>
<body>
        <h1>I am terrible at PHP!</h1>

        <h2><?php echo $0; ?></h2>  

</body>
</html>

但是什么也没显示。我也尝试过以同样的方式使用 print_r。我知道 CodeIgniter 不允许我在控制器中传递变量,而是允许我直接访问数组中的键。

最终我想遍历数组并显示所有结果,但我试图从“小”开始,至少让数组的单个元素传递到视图。如果有人能解释为什么这不起作用,以及如何使用 for 或 foreach 来遍历数组,我将不胜感激。

我知道这个问题可能已经回答过很多次了,但在我的一生中,我无法将这些问题的回答推断为适用于我的情况的解决方案。

【问题讨论】:

  • 非常感谢所有回复的人!

标签: php arrays codeigniter foreach


【解决方案1】:

这是我的建议:

我不建议你使用数字作为变量名。为了解决这个问题,你可以让它的名字以'_'开头。例如:$_1

所以在你的循环中将$cleanarray[$i] = $value; 更改为$cleanarray['_'.$i] = $value;

当然你需要在视图上调用它echo $_0;

【讨论】:

    【解决方案2】:

    据我所知,codeigniter 不会将没有数组的数据从控制器传递到视图,因此您可以尝试以下代码,我必须确保它有效。

    在你的控制器中

        $i=0;
        $cleanarray = array();
        foreach ($phrase as $innerphrase) 
        {
             if (is_array($innerphrase)) 
             {
                    foreach ($innerphrase as $value) 
                    {
                            $cleanarray[$i] = $value;
                            $i++;
                    }
             }
        }
        $data['cleanarray'] = $cleanarray
        $this->load->view('blogview', $data);
    

    在您看来,像这样打印数组print_r($cleanarray); 我相信这段代码会起作用。

    快乐编码:)

    【讨论】:

      【解决方案3】:

      这不是您访问数组变量的方式。 $ 不代表一个数组,它代表一个变量名的开始。访问$cleanarray 的第一个元素的语法是$cleanarray[0]

      我承认我不是 codeigniter 编码器,所以我什至不知道你是否会在“视图”中访问它。我猜不是,因为控制器中有$this 业务。当然其他人可以提供这个细节。

      【讨论】:

        【解决方案4】:

        使用此代码:

        控制器

        $i=0;
        $cleanarray = array();
        
        foreach ($phrase as $innerphrase) {
            if (is_array($innerphrase)) {
                foreach ($innerphrase as $value) {
                    $cleanarray[$i] = $value;
                    $i++;
                }
            }
        }
        
        $array2 =  array();  // create a new array
        $array2['contents']= $cleanarray; // add $cleanarray to the new array
        $this->load->view('blogview', $array2); // pass the new array as the parameter
        

        内视图文件

        echo("内容:");

        // 打印 $cleanarray 中的元素

        foreach ($contents as $val)

        echo "$val<br/>";
        

        注意:我们无法在此处访问 $array2。相反,请使用“$contents[]”。

        【讨论】:

        • 感谢您的全面回答。非常感谢,因为它为我节省了很多头发!
        • 这是我的荣幸! :)
        【解决方案5】:

        在你的控制器中创建 $cleanarray 之后应用这个

        $data['cleanarray'] = $cleanarray;//assign $cleanarray to $data
        $this->load->view('blogview', $data);//pass $data to your view
        

        并在视图中访问您的数组应用此

        <h2><?php echo $cleanarray[0]; ?></h2>
        

        【讨论】:

          猜你喜欢
          • 2011-09-12
          • 2011-09-09
          • 1970-01-01
          • 2016-05-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多