Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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 - Fatal编程技术网

用PHP创建此列表的最佳方法是什么?

用PHP创建此列表的最佳方法是什么?,php,Php,我是新来PHP的,希望看看是否有更好的方法来编写我所拥有的这个小代码片段。基本上,它为一些社交媒体链接提供变量,检查它们是否为空,在函数中创建一个数组,我在UL中调用该数组。我知道这很简单,但我只是看看我所拥有的是否是最好的,或者我是否可以改进它 <?php $facebook = of_get_option('facebook'); $twitter = of_get_option('twitter'); $youtube = of_get_o

我是新来PHP的,希望看看是否有更好的方法来编写我所拥有的这个小代码片段。基本上,它为一些社交媒体链接提供变量,检查它们是否为空,在函数中创建一个数组,我在UL中调用该数组。我知道这很简单,但我只是看看我所拥有的是否是最好的,或者我是否可以改进它

    <?php

    $facebook  = of_get_option('facebook');
    $twitter   = of_get_option('twitter');
    $youtube   = of_get_option('youtube');
    $linkedIn  = of_get_option('linkedin');
    $instagram = of_get_option('instagram');

    $socialMediaLinks = array(

    );

    if (!empty($facebook)){
        $socialMediaLinks[facebook] = $facebook;
    }
    if (!empty($twitter)){
        $socialMediaLinks[twitter] = $twitter;
    }
    if (!empty($youtube)){
        $socialMediaLinks[youtube] = $youtube;
    }
    if (!empty($linkedIn)){
        $socialMediaLinks[linkedIn] = $linkedIn;
    }
    if (!empty($instagram)){
        $socialMediaLinks[instagram] = $instagram;
    }

    function socialMediaList($value, $key){
        echo '<li class="'.$key.'"><a href="'.$value.'">'.$key.'</a></li>';
    }

    ?>

    <?php if (!empty($socialMediaLinks)){ ?>
    <ul class="social-media">
        <?php array_walk($socialMediaLinks, 'socialMediaList'); ?>
    </ul>
    <?php } ?>

试试这个:

<?php

    $socialMediaItems = array(
        'facebook' => of_get_option('facebook'),
        'twitter' => of_get_option('twitter'),
        'youtube' => of_get_option('youtube'),
        'linkedin' => of_get_option('linkedin'),
        'instagram' => of_get_option('instagram')
    );
    $socialMediaLinks = array();

    foreach ($socialMediaItems as $key => $item) {
        if ($item) {
            $socialMediaLinks[$key] = $item;
        }
    }  

    function socialMediaList($value, $key){
        echo '<li class="'.$key.'"><a href="'.$value.'">'.$key.'</a></li>';
    }

    ?>

    <?php if (!empty($socialMediaLinks)){ ?>
    <ul class="social-media">
        <?php array_walk($socialMediaLinks, 'socialMediaList'); ?>
    </ul>
    <?php } ?>


您只需执行以下操作即可缩短代码:

$socialMediaLinks = array_filter(array(
   'facebook' => of_get_option('facebook'),
   'twitter' => of_get_option('twitter'),
   'youtube' => of_get_option('youtube'),
   'linkedIn' => of_get_option('linkedIn'),
   'instagram' => of_get_option('instagram'),
));
这将自动删除所有空条目,因此您以后不需要那么多if语句。

使用数组

<?php

    $facebook  = of_get_option('facebook');
    $twitter   = of_get_option('twitter');
    $youtube   = of_get_option('youtube');
    $linkedIn  = of_get_option('linkedin');
    $instagram = of_get_option('instagram');

    $socialMediaLinks = array();
    $madeArray = array('facebook' => $facebook,'twitter' => $twitter,'youtube' => $youtube,'linkedin' => $linkedIn,'instagram' => $instagram);
    foreach ($madeArray as $key => $value) {
            if (!empty($value)) {
              $socialMediaLinks[$key] =  $value;
            }
    }
    function socialMediaList($value, $key){
        echo '<li class="'.$key.'"><a href="'.$value.'">'.$key.'</a></li>';
    }

    ?>

    <?php if (!empty($socialMediaLinks)){ ?>
    <ul class="social-media">
        <?php array_walk($socialMediaLinks, 'socialMediaList'); ?>
    </ul>
    <?php } ?>

更好的方法是:

<?php
    $socialmedia = array('facebook', 'twitter', 'youtube', 'linkedin' 'instagram');

    $socialMediaLinks = array();

    function GetOptions($name)
    {
        $value = of_get_option($name);
        if (!empty($value))
            $socialMediaLinks[$name] = $value;
    }

    foreach ($socialmedia as $smname)
        GetOptions($smname);

    function socialMediaList($value, $key){
        echo '<li class="'.$key.'"><a href="'.$value.'">'.$key.'</a></li>';
    }
    if (!empty($socialMediaLinks)){ 
?>
    <ul class="social-media">
        <?php array_walk($socialMediaLinks, 'socialMediaList'); ?>
    </ul>
<?php
    }
?>


我做了这样的东西:

$social_networks=['facebook'、'twitter'、'youtube'、'linkedin'、'instagram'];
$media_links=[];
foreach($social_networks as$network){
如果($option=of_get_option($network)){
$media_links[$network]=$option;
}
}
//要输出的代码。。。

如果您编写支持时间短的简单应用程序,您的显示样式将正常。但如果它有些复杂,您应该使用MVC模式。

看起来不错,但循环可以节省代码行。您可以执行
get\u选项
!empty(..
检查循环,而不是编写循环。您应该首先修复错误。将
错误报告(E_ALL);
放在脚本的顶部。在我看来,您应该在一个唯一的数组中获取所有选项(具有某种“全局的获取选项”)函数,然后处理它,而不是单独获取这些选项,然后将其放入数组中…例如:foreach($options as$media){//checks…},我不认为使用!empty在这里很重要,因为如果它真的为空,它就不会显示…你会保留该函数还是在那一点上只使用foreach循环?就我个人而言,我更喜欢使用foreach循环和echo“
  • ”;这是一个简短而清晰的解决方案,而如果使用array_walk,则必须搜索该函数首先在代码中添加ion。但这实际上取决于您喜欢的样式。:-)