2

大家好,我只是想知道如何使用 foreach 打印出一组数组?这是我的简单代码。

<?php

function names_job() {

    $names = array();

    $names['lester'] = array('web developer' => 'name1', 'web designer' => 'name2', 'eating' => 'name2');
    $names['joanna'] = 'web designer';
    $names ['chloe'] = 'student';

    return $names;
}

function display_arr() {

    $names_jobs = names_job();

    foreach( $names_jobs as $name => $job ) {
        echo '<br>Name: ' . $name . ' Job: ' . $job . '<br>';

        foreach( $job as $jobs => $boss ) {
            echo '<br>-- ' . $jobs . ' ' . $boss . '<br>';
        }
    }
}
display_arr();

?>

上面代码的结果是这样的:

Name: lester Job: Array
web developer name1
web designer name2
eating name2
Name: joanna Job: web designer

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\code\index.php on line 21
Name: chloe Job: student

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\code\index.php on line 21
4

3 回答 3

4

$job在尝试迭代它之前,您需要检查是否是一个数组。这也将阻止它作为字符串 ( "Array") 输出。

您可以为此使用 PHPis_array()函数:http: //php.net/manual/de/function.is-array.php

function display_arr() {

    $names_jobs = names_job();

    foreach( $names_jobs as $name => $job ) {
        echo '<br>Name: ' . $name;

        if( is_array( $job ){
            foreach( $job as $jobs => $boss ) {
                echo '<br>-- ' . $jobs . ' ' . $boss . '<br>';
            }
        }
        else{
            echo ' Job: ' . $job;
        }
    }
}
于 2013-08-25T06:10:39.110 回答
0

并非所有 $job($names_jobs 的值)都是数组。这就是你得到的方式

Name: lester Job: Array
web developer name1
web designer name2
eating name2

在第一遍中,但在第二遍中收到警告,其中 $job 不是数组。

现在我意识到上面的答案(@Mark Resølved)给出了可靠的修改代码。

于 2013-08-25T06:15:42.367 回答
0

我不明白你为什么要这样设置数组的结构。

但是给您一个问题的答案:您正在步行扔一个数组,并期望数组的每个部分都是另一个数组,其中数组中唯一的第一个条目是一个。Joana 和 Chloe 是普通字符串,因此试图将它们视为数组会导致错误。

您可以使用 is_array() 来检查对象或变量是否是数组,而不是像需要一样对待它。

问候索利克

于 2013-08-25T06:16:33.510 回答