打印数组,分隔具有相同子字符串的组中的值

时间:2014-01-25 04:59:56

标签: php arrays printing line-breaks

我有一个数组,其中包含按域扩展名排序的域列表,例如:

values[0] = "programming.ca";
values[1] = "Stackoverflow.ca";
values[2] = "question.com";
values[3] = "answers.com";
values[4] = "AASystems.com";
values[5] = "test.net";
values[6] = "hello.net";
values[7] = "apple.nl";
values[8] = "table.org";
values[9] = "demo.org";

如何打印此数组,同时自动将其分组到具有相同域扩展名且以换行符<br />分隔的组中,以便结果如下所示?

programming.ca
Stackoverflow.ca

question.com
answers.com
AASystems.com

test.net
hello.net

apple.nl

table.org
demo.org

4 个答案:

答案 0 :(得分:1)

试试这个。

$ext = "";
for($i = 0; $i < count($values); $i++) {
    $parts = explode('.', $values[$i]);
    $e = $parts[count($parts) - 1];
    if(strcmp($parts[count($parts) - 1], $ext) != 0) {
        $ext = $e;
        echo '<br/>';
    }
    echo $values[$i].'<br/>';
}

答案 1 :(得分:0)

我编辑希望命名更清晰。基本上,爆炸每个域获取name.extension,然后将每个名称存储在(extension,domainArray)对的字典中,然后在字典中输入foreach,获取domainArray,然后在domainArray中输出foreach名称,回显出域名。扩展,然后换行,然后是每个字典条目的另一个换行符。

<?php

$values[0] = "programming.ca";
$values[1] = "Stackoverflow.ca";
$values[2] = "question.com";
$values[3] = "answers.com";
$values[4] = "AASystems.com";
$values[5] = "test.net";
$values[6] = "hello.net";
$values[7] = "apple.nl";
$values[8] = "table.org";
$values[9] = "demo.org";

$domainsList = [];
foreach ($values as $val) {
    $valArr = explode(".", $val);
    $name = $valArr[0];
    $extension = $valArr[1];
    if (isset($domainsList[$extension])) {
        $domainsList[$extension][] = $name;
    } else {
        $domainsList[$extension] = [$name];
    }
}

foreach ($domainsList as $extension => $domains) {
    foreach ($domains as $domain) {
        echo $domain . "." . $extension . "<br />";
    }
    echo "<br />";
}

答案 2 :(得分:0)

如果域名按域扩展名排序,请尝试此操作

$values[0] = "programming.ca";
$values[1] = "Stackoverflow.ca";
$values[2] = "question.com";
$values[3] = "answers.com";
$values[4] = "AASystems.com";
$values[5] = "test.net";
$values[6] = "hello.net";
$values[7] = "apple.nl";
$values[8] = "table.org";
$values[9] = "demo.org";


$prev_ext = "";

foreach($values as $domain_name)
{
    $arr_temp = explode(".", $domain_name);
    $domain_ext = $arr_temp[1];

    if($prev_ext!=$domain_ext)
    {
        echo '<br/></br/><br/>';
    }

    echo $domain_name."<br/>";
    $prev_ext = $domain_ext;
}

更新:2

如果域名不符合其扩展名

,请尝试此操作
   $values[0] = "programming.ca";
$values[1] = "AASystems.com";
$values[2] = "demo.org";
$values[3] = "answers.com";
$values[4] = "Stackoverflow.ca";
$values[5] = "test.net";
$values[6] = "hello.net";
$values[7] = "apple.nl";
$values[8] = "table.org";
$values[9] = "question.com";

$arr_domains = array();

foreach($values as $domain_name)
{
    $arr_temp = explode(".", $domain_name);
    $domain_ext = $arr_temp[1];

    $arr_domains[$domain_ext][] = $domain_name;
}

foreach($arr_domains as $ext=>$arr_name)
{
    echo "<br/><br/><b>".$ext."</b><br/>";
    foreach($arr_name as $name)
    {
         echo $name."<br/>";
    }
}

答案 3 :(得分:0)

试试这段代码。

$domian = array(
    "programming.ca",
    "Stackoverflow.ca",
    "question.com",
    "answers.com",
    "AASystems.com",
    "test.net",
    "hello.net",
    "apple.nl",
    "table.org",
    "demo.org");

$result;

foreach ($domian as $value) {
    $arr = explode('.', $value);
    $result[$arr[1]][] = $value;
}

print_r($result);