PHP多维数组

| 我正在尝试制作一个通用的脚本,该脚本将关键字添加到我的各个页面中(因为标头位于包含文件中),所以我要获取url的结尾(multi.php)并从中获取desc等。的数组。由于某种原因,它只返回\“ m \”而不返回关键字或描述。 。 。有点随机,让我挠头。这就是我得到的
<html>
<head>
    <title>Multi-Demensional Array</title>
<?php

$path = pathinfo($_SERVER[\'PHP_SELF\']);
$allyourbase = $path[\'basename\'];

$pages = array
(
    \"multi.php\" => array
    (
        \"keywords\"  => \"index, home, test, etc\",
        \"desc\"      => \"This is the INDEX page\",
        \"style\"     => \"index.css\"
    ),

    \"header.php\" => array
    (
        \"keywords\"  => \"showcase, movies, vidya, etc\",
        \"desc\"      => \"SHOWCASE page is where we view vidya.\",
        \"style\"     => \"showcase.css\"
    )
);



?>
</head>
<body>

<?php 

foreach($pages as $key => $value)
{
    if($key == $allyourbase)
    {
        echo $key[\'desc\'];
    }
}

?> 

</body>
</html>
    
已邀请:
        发生这种情况的原因是因为在PHP中,如果我有以下代码:
$hello = \'world\';
并且我尝试执行以下操作:
echo $hello[0];
PHP将字符串视为数组,然后将位置0处的值返回给我,这将导致
w
,当您使用foreach时,您要求PHP将数组的键设置为
$key
,并将其值设置为
$value
。 然后,您回显
echo $key[\'desc\'];
,因为该值是一个字符串,因此php会将其视为基于整数的索引,因此,如果要将
echo $key[\'desc\']
更改为基于散列的数组
echo $value[\'desc\']
,它将忽略对
desc
的调用,然后返回第一个索引它将返回所需的结果。 您应该能够执行以下操作:
if(isset($pages[$allyourbase]))
{
    echo $pages[$allyourbase][\'desc\'];
}
无需循环     
        尝试
 echo $key[\'desc\'];
用。。。来代替
echo $value[\'desc\']; 
    
        其他人提供了一些不错的解决方案,但是重要的是您必须准确了解这里发生的事情,因此您不会再犯相同的错误。请注意注释,您将成功进行编码! 这是正在发生的事情:
foreach ($pages as $key => $value) {
    if ($key == $allyourbase) {
        // At this point: $key = \'multi.php\'
        // Also: $value = array( ... );

        // Keep in mind: $key[\'desc\'] = $key[0] = \'m\';
        // You are grabbing the first letter of the \'multi.php\' string.

        // When dealing with strings, PHP sees $key[\'desc\'] as $key[0],
        // which is another way to grab the very first character of \'multi.php\'

        echo $key[\'desc\'];

        // You really want $pages[$key][\'desc\'], but below 
        // is a better way to do it, without the overhead of
        // the loop.
    }
}
如果保留循环,这实际上是不必要的,则看起来像这样:
foreach ($pages as $key => $value) {
    if ($key == $allyourbase) {
        echo $value[\'desc\'];
    }
}
最好的解决方案是用以下代码替换循环:
if (isset($pages[$allyourbase])) {
    echo $pages[$allyourbase][\'desc\'];
} else {
    // error handling
}
    
        如果我没有看错,
echo $key[\'desc\'];
应该是
echo $value[\'desc\'];
。     

要回复问题请先登录注册