Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php传递函数参数值以选择其他字符串并给该字符串一个值_Php_Function_Arguments - Fatal编程技术网

php传递函数参数值以选择其他字符串并给该字符串一个值

php传递函数参数值以选择其他字符串并给该字符串一个值,php,function,arguments,Php,Function,Arguments,我绞尽脑汁想办法解决这个问题。我的站点上的每个文档都会调用一个头文件,我需要动态地从每个文档中选择一个给定值的锚定。详情如下: function headur($page) {echo'... <ul> <li><a'.$h.' href="/">Home</a> <li><a'.$s.' href="/services">Services</a> <li>

我绞尽脑汁想办法解决这个问题。我的站点上的每个文档都会调用一个头文件,我需要动态地从每个文档中选择一个给定值的锚定。详情如下:

function headur($page) {echo'...
    <ul>
      <li><a'.$h.' href="/">Home</a>
      <li><a'.$s.' href="/services">Services</a>
      <li><a'.$p.' href="/portfolio">Portfolio</a>
      <li><a'.$a.' href="/about">About</a>
      <li><a'.$c.' href="/contact">Contact</a>
    </ul>...
  ;}
关键是它是从调用函数的文档中动态选择的,而无需手动创建一个大的旧if语句来匹配所有内容。i、 e.
if($page==a){$a='class=“selected”;}
对于每一个,这就是我一直在做的。我猜这相当于php做
.addClass()但在外部文件上


提前谢谢。

您可以这样做:

    <ul>
      <li><a href="/">Home</a>
      <li><a href="/services">Services</a>
      <li><a href="/portfolio">Portfolio</a>
      <li><a class="selected" href="/about">About</a>
      <li><a href="/contact">Contact</a>
    </ul>
<ul>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/' ? 'selected' : '' ?>" href="/">Home</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/services' ? 'selected' : '' ?>" href="/services">Services</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/portfolio' ? 'selected' : '' ?>" href="/portfolio">Portfolio</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/about' ? 'selected' : '' ?>"href="/about">About</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/contact' ? 'selected' : '' ?>" href="/contact">Contact</a>
</ul>
$pages = array("", "services", "portfolio", "about", "contact");
$where = array_search($a, $pages); // $a is the param passed to the function
$pages[$where] .= "\" class=\"selected\"";

只需将类定义存储在数组中,并按索引进行搜索即可。为数组使用数字键是最简单的,但在读回代码时描述性不强。要使用数字键,只需执行以下操作:

    <ul>
      <li><a href="/">Home</a>
      <li><a href="/services">Services</a>
      <li><a href="/portfolio">Portfolio</a>
      <li><a class="selected" href="/about">About</a>
      <li><a href="/contact">Contact</a>
    </ul>
<ul>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/' ? 'selected' : '' ?>" href="/">Home</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/services' ? 'selected' : '' ?>" href="/services">Services</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/portfolio' ? 'selected' : '' ?>" href="/portfolio">Portfolio</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/about' ? 'selected' : '' ?>"href="/about">About</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/contact' ? 'selected' : '' ?>" href="/contact">Contact</a>
</ul>
$pages = array("", "services", "portfolio", "about", "contact");
$where = array_search($a, $pages); // $a is the param passed to the function
$pages[$where] .= "\" class=\"selected\"";

我按顺序创建了您的页面,因此$h将被$pages[0]替换,$s将被$pages[1]替换,依此类推。如果您想让我为您编写一些代码,以便您可以在数组中使用文本键来简化操作,我也可以这样做,但我个人认为,如果不使用额外的代码,这很好。

创建数组并在数组中迭代是非常典型的:

$linkMenu = array(
    '/' => 'Home',
    '/services' => 'Services',
    '/portfolio' => 'Portfolio',
    '/about' => 'About',
    '/contact' => 'Contact',
);

function linkList($links, $page=null) {
    echo '<ul>';
    foreach($links as $url=>$name) {
        $selected = ($url == $page) ? " class='selected' " : '';
        echo "<li><a $selected href='$url'>$name</a></li>\n";
    }
    echo '</ul>';
}

解决方案可以是将模板加载到DOMDocument中,并将链接设置为与当前URL匹配的活动链接:

$dom = new DOMDocument();
$dom->loadXML('<ul><li><a href="/yourLink">Your Link</a></li></ul>');

$xpath = new DOMXPath($dom);
$url = $_SERVER['REQUEST_URI'];

foreach ($xpath->query(sprintf('//a[@href="%s"]', $uri)) as $current) {
    $current->setAttribute('class', 'selected');
} 

echo $dom->saveXML();
$dom=newdomdocument();
$dom->loadXML('
'); $xpath=newdomxpath($dom); $url=$\u服务器['REQUEST\u URI']; foreach($xpath->query(sprintf('//a[@href=“%s”]”,$uri))作为$current){ $current->setAttribute('class','selected'); } echo$dom->saveXML();

代码没有经过测试!但它应该给你一个想法。。。通过这种方式,您可以编写模板文件,而不需要任何PHP代码

嗨,马克,很不幸,这不是开箱即用的,首先我必须去掉Hi-Dan,谢谢你的回复,你能澄清一下在每个文档的函数中调用的参数吗?我添加了您编写的脚本,在UL中,将$h、$s等更改为$pages[0]、$pages[1]等,但在我所能想到的各个方面,它根本不起作用。我当前的解决方案是$z='class=“selected”';如果($page==h){$h=$z;}elseif($page==s){$s=$z;}elseif($p==p){$p=$z;}elseif($a==z;}elseif($a=$z;})运行得很好,但我正在寻找一个更简单的解决方案。嗨,Markus,这并不是我想要的,我需要保留这个设置纯粹是因为我正在使用它。感谢您尝试(尽管=)您好,恐怕这会返回一个错误
警告:为foreach()提供的参数无效
当我将代码复制并粘贴到PHP文件中并按原样运行时,我会得到预期的输出。也许你在什么地方拼错了
$linkMenu
变量名?我从你提交的内容中复制并粘贴了它:/php的哪个版本?