2014-09-21 76 views
2

我知道如何從一個列表到Z:如何從一個列表到Z在PHP中,然後就到AA,AB,AC,等

foreach (range('A', 'Z') as $char) { 
    echo $char . "\n"; 
} 

但是我怎麼去從那裏列表AA,AB,AC,AD,... AZ,BA,BB,BC等?

我做了一個快速的谷歌搜索,找不到任何東西,但我想這種方法會有所不同。

我想我可以通過使用for循環和一個內部帶有字母的數組來實現,儘管這種方式看起來有點粗俗。

還有其他方法嗎?

謝謝。

+0

如何使用您的代碼示例作爲胚胎的遞歸函數? – 2014-09-21 11:06:27

回答

10

PHP有字符串增量操作者正是這麼做的:

for($x = 'A'; $x < 'ZZ'; $x++) 
    echo $x, ' '; 

結果:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF... 

編號:

PHP在處理字符變量而不是C的算術運算時遵循Perl的慣例。例如,在PHP和Perl中$ a ='Z'; $ A ++;將$ a變成'AA',而在C a ='Z'中;一個++;將a變成'['('Z'的ASCII值是90,'['的ASCII值是91)。請注意,字符變量可以遞增但不遞減,即使如此,只支持純ASCII字母和數字(a-z,A-Z和0-9)。遞增/遞減其他字符變量不起作用,原始字符串不變。

http://php.net/manual/en/language.operators.increment.php

+1

哇 - 真的沒想到。 – think123 2014-09-21 11:12:00

+0

不得不說,它適用於上述情況,但是當您嘗試使用for(例如,$ x ='A'; $ x <'AZ'; $ x ++)'時,它會中斷。 – think123 2014-09-21 11:14:49

+1

@ think123:用'!='替換'<'=' – georg 2014-09-21 11:15:34

2

嘗試

foreach (range('A', 'Z') as $char) { 
    foreach (range('A', 'Z') as $char1) { 
     echo $char . $char1. "\n"; 
    } 
} 
+0

我想你錯過了最後一部分***等等?***。 – 2014-09-21 11:08:07

+0

嗯,sorta的作品 - 但這將如何給我A,B,C ... Z第一? – think123 2014-09-21 11:09:44

0

我搞砸了一下週圍,並得到了這一點:

$addon = 64; 
for ($i = 1; $i <= 700; $i++) { 
    $prefix = ""; 
    if ($i > 26) { 
    $remainder = floor($i/26); 
    $prefix = chr($remainder + $addon); 
    } 
    $ivalue = ($i % 26 == 0) ? 26 : $i % 26; 
    echo $prefix . chr($addon + $ivalue) . "<br />"; 
} 

$addon是64,至於字符代碼爲65,這意味着我們只想補充一點,從A到Z的工作。直到ZZ工作 - 隨意使它適用於AAA,AAB,AAC等。

0

使用此遞歸函數來從A得到確切範圍AC

您可以使用此爲Excel列表也喜歡

function myRange($end_column = '', $first_letters = '') { 
    $columns = array(); 
    $length = strlen($end_column); 
    $letters = range('A', 'Z'); 

    // Iterate over 26 letters. 
    foreach ($letters as $letter) { 
     // Paste the $first_letters before the next. 
     $column = $first_letters . $letter; 
     // Add the column to the final array. 
     $columns[] = $column; 
     // If it was the end column that was added, return the columns. 
     if ($column == $end_column) 
      return $columns; 
    } 

    // Add the column children. 
    foreach ($columns as $column) { 
     // Don't itterate if the $end_column was already set in a previous itteration. 
     // Stop iterating if you've reached the maximum character length. 
     if (!in_array($end_column, $columns) && strlen($column) < $length) { 
      $new_columns = myRange($end_column, $column); 
      // Merge the new columns which were created with the final columns array. 
      $columns = array_merge($columns, $new_columns); 
     } 
    } 

    return $columns; 
} 

通話功能。

print_r(myRange('AC')); 

會給你造成

一個 乙 Ç 。 。 。 AA AB AC

相關問題