我创建了以下代码:
<?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++;
}
此代码的输出如下所示:
现在,如果您查看输出,它将打印所有字符和所有数字。即使那些没有对应值的
例如: 字符“ A”具有四个值“ Alex”,“ Alan”,“ Alesso”,“ Avici” 因此它将打印所有四个值,因为此字符与所有四个值的第一个字符都匹配
但是即使数组中没有任何字符,字符“ B”也会被打印出来
那么我如何只打印那些在给定数组中具有相应值的字符(带有值)?
请参阅屏幕截图以获取更多信息
答案 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 -