从具有计数器的阵列访问数据

时间:2011-09-16 19:40:08

标签: php arrays loops multidimensional-array

我有一个像这样的数组结构:

Array
(
    [0] => Array
        (
            [term_id] => 22
            [name] => Aaa Aa
            [slug] => aaa-aa
            [term_group] => 0
            [term_taxonomy_id] => 22
            [taxonomy] => category
            [description] => 
            [parent] => 13
            [count] => 0
            [cat_ID] => 22
            [category_count] => 0
            [category_description] => 
            [cat_name] => Aaa Aa
            [category_nicename] => aaa-aa
            [category_parent] => 13
        )

    [1] => Array
        (
            [term_id] => 11
            [name] => adasdasda
            [slug] => adasdasda
            [term_group] => 0
            [term_taxonomy_id] => 11
            [taxonomy] => category
            [description] => asdsdad
            [parent] => 1
            [count] => 0
            [cat_ID] => 11
            [category_count] => 0
            [category_description] => asdsdad
            [cat_name] => adasdasda
            [category_nicename] => adasdasda
            [category_parent] => 1
        )
)

我想知道如何轻松地循环输出数据......

例如,我想显示所有名称,描述和slu ..

我无法弄清楚如何全部显示它们......

这就是我所拥有的,它有点有用,但是这是一种无效的争论。

    for ($i = 0; $i <= count($data); $i++) {
    foreach($data[$i] as $key => $value){
            echo "KEY: ".$key."<br />\n VALUE: ".$value."<br />\n"; 
        }
    }

2 个答案:

答案 0 :(得分:1)

无需使用for循环,foreach就足够了。这样您就不必处理超出边界(索引未设置)警告。

$array = array(); // <- your data here
foreach ($array as $arr) {
    echo 'Name: ', $arr['name'], '<br />',
         'Description: ', $arr['description'], '<br />',
         'Slug: ', $arr['slug'], '<br />';
}

答案 1 :(得分:1)

您收到警告是因为您正在访问不存在的$data元素。 for条件中的边界检查太高,count将返回2,但$data[2]未设置,因此无法在foreach内使用。

而是做(Demo):

for ($i = 0; $i < count($data); $i++) { # $i < count, not $i <= count
    foreach($data[$i] as $key => $value){
        echo "KEY: ".$key."<br />\n VALUE: ".$value."<br />\n"; 
    }
}

当然,使用外部foreach也更容易:

foreach($data as $oneData)
{
    foreach($oneData as $key => $value)
    {
        echo "KEY: $key<br />\n VALUE: $value<br />\n"; 
    }
}

这基本上是一样的,你不需要关心计数器变量。

接下来,您需要决定要显示哪个数据。您可以选择性地选择它们,而不是显示所有项目:

$displayKeys = array('name', 'description', 'slug');

foreach($data as $oneData)
{
    foreach($displayKeys as $key)
    {
        $value = $oneData[$key];
        echo "KEY: $key<br />\n VALUE: $value<br />\n"; 
    }
}

然后你可能想要标记输出:

$displayKeys = array('name' => 'Name', 'description' => 'Description', 'slug' => 'Slug');

foreach($data as $oneData)
{
    foreach($displayKeys as $key => $label)
    {
        $value = $oneData[$key];
        echo "$label: $value<br />\n"; 
    }
}