如何在PHP中打印数组字符或数字明智的元素?

时间:2019-01-03 07:38:05

标签: php arrays

我创建了以下代码:

<?php

$arry = array('Alex', 'Alan', 'Alesso', 'Avici', '2222', 'Calvin', 'Gran', '2121', '1001', '11545', '9090');

sort($arry);
echo '<pre>';print_r($arry);



for($i=1;$i<=9;$i++) {
echo '<Br/><h2>'.$i.'</h2>';    
    foreach($arry as $s) {
        if ($s[0] == $i) {

            echo $s.' - ';
        }
    }
}

for($c='A',$j=1;$j<=26;$j++) {
                echo '<Br/><h2>'.$c.'</h2>';
    foreach($arry as $s) {

        if ($s[0] == $c) {

            echo $s.' - ';
        }
    }
    $c++;
}

此代码的输出如下所示:

OUTPUT

现在,如果您查看输出,它将打印所有字符和所有数字。即使那些没有对应值的

例如: 字符“ A”具有四个值“ Alex”,“ Alan”,“ Alesso”,“ Avici” 因此它将打印所有四个值,因为此字符与所有四个值的第一个字符都匹配

但是即使数组中没有任何字符,字符“ B”也会被打印出来

那么我如何只打印那些在给定数组中具有相应值的字符(带有值)?

请参阅屏幕截图以获取更多信息

4 个答案:

答案 0 :(得分:3)

更改数组格式,这变得很简单:

<?php
$arry = array('Alex', 'Alan', 'Alesso', 'Avici', '2222', 'Calvin', 'Gran', '2121', '1001', '11545', '9090');
sort($arry);

foreach($arry as $v)
    $result[$v[0]][] = $v;

foreach($result as $k=>$v)
    echo "$k\n" . implode(', ', $v) . "\n";

输出:

1
1001, 11545
2
2121, 2222
9
9090
A
Alan, Alesso, Alex, Avici
C
Calvin
G
Gran

答案 1 :(得分:0)

在输出任何内容之前,您需要知道是否有匹配项,因此这段代码着眼于每个字符(我建立了1个数组,其中包含所有使用range()的选项),并找到任何匹配的元素。然后,如果有一些匹配的元素,它将把它们打印出来...

$arry = array('Alex', 'Alan', 'Alesso', 'Avici', '2222', 'Calvin', 'Gran', '2121', '1001', '11545', '9090');

sort($arry);
echo '<pre>';print_r($arry);

$match = array_merge(range(1,9), range("A", "Z"));
foreach ( $match as $char ){
    // Create empty list
    $matches = [];
    foreach($arry as $s) {
        if ($s[0] == $char) {
            // Add match to list
            $matches[] = $s;
        }
    }
    // Check if any matches
    if ( count($matches) > 0 )  {
        echo '<Br/><h2>'.$char.'</h2>'.implode(" - ", $matches);
    }
}

对所有匹配项(数字和字符)使用1个循环的优点是,如果您想添加更多逻辑或更改输出显示,则可以在1个位置进行更改。

您可以添加一些额外的逻辑,以说在对列表进行排序时-如果您已经找到匹配项,而当前项目不匹配,则停止。在这种情况下,哪一个恕我直言不值得。

答案 2 :(得分:0)

所以在打印$ i和$ c之前,您需要检查是否有污迹:

<?php

$arry = array('Alex', 'Alan', 'Alesso', 'Avici', '2222', 'Calvin', 'Gran', '2121', '1001', '11545', '9090');

sort($arry);
echo '<pre>';print_r($arry);



for($i=1;$i<=9;$i++) {
    $tmp = '';
    foreach($arry as $s) {
        if ($s[0] == $i) {
            $tmp.= $s.' - ';
        }
    }
    if (!empty($tmp)) {
        echo '<Br/><h2>'.$i.'</h2>';
        echo $tmp;
    }
}

for($c='A',$j=1;$j<=26;$j++) {
    $tmp = '';
    foreach($arry as $s) {

        if ($s[0] == $c) {

            echo $s.' - ';
        }
    }
    $c++;
    if (!empty($tmp)) {
        echo '<Br/><h2>'.$c.'</h2>';
        echo $tmp;
    }
}

结果:

<pre>Array
(
    [0] => 1001
    [1] => 2121
    [2] => 2222
    [3] => 9090
    [4] => 11545
    [5] => Alan
    [6] => Alesso
    [7] => Alex
    [8] => Avici
    [9] => Calvin
    [10] => Gran
)
<Br/><h2>1</h2>1001 - 11545 - <Br/><h2>2</h2>2121 - 2222 - <Br/><h2>9</h2>9090 - Alan - Alesso - Alex - Avici - Calvin - Gran - 

答案 3 :(得分:0)

我使用了您的代码,只是对其进行了一些改动。我插入了bool,以确定其中是否包含值。如果是这样,它将打印,否则它将不打印。

$arry = array('Alex', 'Alan', 'Alesso', 'Avici', '2222', 'Calvin', 'Gran', '2121', 
'1001', '11545', '9090');

sort($arry);
echo '<pre>';print_r($arry);



for($i=1;$i<=9;$i++) {


$contains = false;

foreach($arry as $s) {
    if ($s[0] == $i) {

        $contains = true;
    }
}

if($contains){

    echo '<Br/><h2>'.$i.'</h2>'; 

}


foreach($arry as $s) {
    if ($s[0] == $i) {

        echo $s.' - ';
    }
}
}



for($c='A',$j=1;$j<=26;$j++) {

$contains2 = false;

foreach($arry as $s) {

    if ($s[0] == $c) {

        $contains2 = true;
    }
}

if($contains2){

    echo '<Br/><h2>'.$c.'</h2>';

}


foreach($arry as $s) {

    if ($s[0] == $c) {

        echo $s.' - ';
    }
}
$c++;
}

输出:

1
1001 - 11545 - 
2
2121 - 2222 - 
9
9090 - 
A
Alan - Alesso - Alex - Avici - 
C
Calvin - 
G
Gran -