我用PHP编写了这个脚本:
$menuen = array(
"didattica" => "program",
"procedure" => "policies",
"news" => "news",
);
$menuit = array(
...
);
function getName ($link) {
if ($lang === "en") {
if (in_array($link, array_keys($menuen))) {
return $menuen[$link];
}
else {
return ucfirst(str_replace("_", " ", $link));
}
}
else {
if (in_array($link, array_keys($menuit))) {
return $menuit[$link];
}
else {
return ucfirst(str_replace("_", " ", $link));
}
}
}
$lang是en。但是当我调用函数如asgetName(“didattica”)
,脚本引发以下错误:
Warning: array_keys() expects parameter 1 to be array, null given in [script path] on line [if (in_array($link, array_keys($menuen))) {]
Warning: in_array() expects parameter 2 to be array, null given in [script path] on line [if (in_array($link, array_keys($menuen))) {]
因此,脚本无法将$menuen识别为数组。为什么?
提前谢谢你
所以,每个人都建议你定义全局...现在,看了看你试图实现的目标,这是本地化的东西。
假设你已经决定写你自己的(出于未知的原因;去phpclasses.org,你会找到一百万个本地化脚本来做这件事),我建议如下:
$menuen = array(
"didattica" => "program",
"procedure" => "policies",
"news" => "news",
);
$menuit = array(
...
);
$lang = $_GET['lang']; // Just an example of how the lang would be set
if ($lang == 'en') {
$link_name = getName($link, $menuen);
elseif ($lang == 'it') {
$link_name = getName($link, $menuit);
.... // Also suggest using switch if it's a defined list; or perhaps a better array to hold all of them.
function getName ($link, $menu) {
if (in_array($link, array_keys($menu))) {
return $menu[$link];
}
else {
return ucfirst(str_replace("_", " ", $link));
}
}
这样,几乎没有代码重复,并且完全可重用。
[编辑:一个更好的方法]
$menues = array (
"en" => array (
"didattica" => "program",
"procedure" => "policies",
"news" => "news",
),
"it" => array (
"didattica" => "...",
"procedure" => "...",
"news" => "...",
),
);
$lang = 'it';
$link = 'news';
$link_name = getName($link, $menues, $lang);
if ($link_name === false ) {
echo "Language not defined";
}
echo $link_name;
function getName ($link, $menues, $lang) {
if (in_array($lang, array_keys($menues))) {
if (in_array($link, array_keys($menues[$lang]))) {
return $menues[$lang][$link];
}
else {
return ucfirst(str_replace("_", " ", $link));
}
}
else {
return false;
}
}
问题与变量的范围有关,您需要首先将其标识为全局变量。
更改此函数的功能:
function getName ($link) {
global $menuen,$menuit;
if ($lang === "en") {
if (in_array($link, array_keys($menuen))) {
return $menuen[$link];
}
else {
return ucfirst(str_replace("_", " ", $link));
}
}
else {
if (in_array($link, array_keys($menuit))) {
return $menuit[$link];
}
else {
return ucfirst(str_replace("_", " ", $link));
}
}
}
$menuen/$menuit
不在函数范围内。你可以做两件事中的一件。
使用全局
:
function getName ($link) {
global $menuen,$menuit;
....
}
将变量作为函数参数传递:
function getName ($link,$menuen,$menuit) {
....
}
getName($link,$menuen,$menuit);
二是优选方法。
我遵循这个教程: https://www.w3schools.com/php/php_xml_dom.asp 循环遍历XML部分是有问题的。出于某种原因,PHP将DOM对象视为数组。此外,var_dump除了长度之外,不返回任何关于对象属性的信息,但程序输出看起来像是不知从何而来。foreach可以通过某种方式循环对象吗?如果有,这些属性(节点名和节点值)包含在哪里,因为var_dump没有显示它
在C中不使用sizeof查找数组大小的问题中,asker将int数组视为int数组的数组,方法是获取地址,然后指定数组索引为1:
它将把牌阵的一半分配给玩家和计算机(玩家得到前半部分,计算机得到后半部分)。现在这是先洗牌,所以是的,这似乎是公平的。 我得到的出界错误是这一行:
但是,正确的数据条目在被调用时会打印出来。我试着在网上寻找我应该做什么的答案,但我找不到任何实际可行的东西。我刚刚开始学习Java,所以可能有一个非常简单的答案,我只是忽略了。如果有人有什么想法,我将不胜感激。
我想做的很简单。将这个包含json对象的数组解析为Javascript数组。 但是unicode字符\u003C似乎破坏了解析器。在chrome控制台中,我看到“UncaughtSyntaxerror:意外令牌” 多一点信息。以上是代码的计算结果。实际上,代码包含一个jsp表达式。 如果我删除单引号,没有问题,但是eclipse给我一个“丢失分号”的错误消息。是否可以解析数组与引号,因为我试图做的