PHP |使用某种PHP循环简化重复代码?

时间:2018-03-20 10:49:13

标签: php arrays loops foreach

我想知道你是否可以帮助我减少我的代码。

我为客户端网站构建了一个定制的 share include。它工作正常,但我相信你们中的一个聪明很多可以帮助我减少它的体积。

我有三个共享网址: $share_url_facebook$share_url_twitter$share_url_linkedin

每个网址的结构都不同,而且相当复杂。

然后我有以下代码:

echo '<a href="' . $share_url_facebook . '" title="Share this on facebook">';
echo '<i class="fa fa-facebook"></i>';
echo '</a>';
echo '<a href="' . $share_url_twitter . '" title="Share this on twitter">';
echo '<i class="fa fa-twitter"></i>';
echo '</a>';
echo '<a href="' . $share_url_linkedin . '" title="Share this on LinkedIn">';
echo '<i class="fa fa-linkedin"></i>';
echo '</a>';

有没有办法让我创建某种循环来防止重复?

根据@JasonK接受的解决方案,这是我的最终(简化)测试代码:

$share = [
    'facebook' => [
        'title' => 'Facebook',
        'url'   => 'https://www.facebook.com/'
    ],
    'twitter' => [
        'title' => 'Twitter',
        'url'   => 'https://twitter.com'
    ],
    'linkedin' => [
        'title' => 'LinkedIn',
        'url'   => 'https://linkedin.com'
    ]
];
foreach ($share as $key => $details) {
    echo '<a href="' . $details['url'] . '" title="Share this on ' . $details['title'] . '">';
    echo '<i class="fa fa-' . $key . '"></i>';
    echo '</a>';
}

3 个答案:

答案 0 :(得分:3)

正如你已经建议的那样;创建一个数组并迭代它。

$social = [
    'facebook' => [
        'title' => 'Facebook'
        'url'   => 'https://facebook.com'
    ],
    'twitter' => [
        'title' => 'Twitter'
        'url'   => 'https://twitter.com'
    ],
    'linkedin' => [
        'title' => 'LinkedIn'
        'url'   => 'https://linkedin.com'
    ]
];

foreach ($social as $key => $details) {
    echo 'Key ' . $key;
    echo 'Title ' . $details['title'];
    echo 'URL ' . $details['url'];
}

答案 1 :(得分:1)

您可以使用数组来存储&#34; config&#34;。 Key是服务名称,value是url或带url的变量。

之后,您可以使用foreach迭代此数组。 在foreach中,您可以使用echo或其他函数输出字符串,或将asigne字符串输出到变量。我使用sprintf格式化所有字符串而没有受到污染,并将其分配给变量http://php.net/manual/en/function.sprintf.php

$services [
  'facebook' => $share_url_facebook,
  'twitter' => $share_url_twitter
]
$output = '';
foreach ($services as $serviceName => $url) {
    $output += sprintf(
       '<a href="%s" title="Share this on %s"><i class="fa fa-%s"></i></a>', 
       $url, 
       ucfirst($serviceName),
       $serviceName
   );
}

答案 2 :(得分:1)

对此有一个更短的解决方案,它使用PHP动态变量,并不强制您创建包含所有细节的数组。

这样你就可以保留旧的变量。这个特别有用,如果它们来自你自己写的文件,因此不能/不想改变

yy[2] = y - (r+yc)/2;