2016-07-14 60 views
-3

我打算生成一個簡單的算法,但是我被要求不使用內置的PHP函數。請幫忙?不使用內置PHP函數的簡單算法?

主要文件看起來像這樣(main.php):

<?php 
    $myfile = "in.txt"; 
    $lines = file($myfile); 
    $line1 = $lines[0]; 
    $line2 = $lines[1]; 
    $newtext = wordwrap($line2, $line1, "\n", false); 
    $fh = fopen('out.txt', 'w'); 
    fwrite($fh, $newtext); 
?> 

而且它應該採取一個文件(in.txt),它看起來是這樣的:

15 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi semper, est non gravida venenatis, est neque fringilla quam, hendrerit ultrices justo turpis nec augue. 

並添加換行符,每個具有線X字符(是這種情況下,15)

最終產品看起來像這樣(out.txt):

Lorem ipsum 
dolor sit amet, 
consectetur 
adipiscing 
elit. Morbi 
semper, est non 
gravida 
venetatis, est 
negue fringilla 
quam, hendrerit 
ultrices justo 
turpis nec 
augue. 

如何在不使用這些預製的PHP函數的情況下創建此算法?

+1

您允許使用'fopen()','fwrite()'等嗎? – Will

+2

你嘗試過什麼嗎?加:學校的任務。親自做你的功課! –

+0

什麼是[文件()](http://php.net/manual/en/function.file.php)(和其他一些你正在使用),但一個PHP內置函數? – FirstOne

回答

0
$number = 15; 
$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi semper, est non gravida venenatis, est neque fringilla quam, hendrerit ultrices justo turpis nec augue.'; 

簡單的解決方案是簡單地遍歷每個字符,記下你所處的字符數,然後在正確的位置輸出換行符。

for ($i = 0, $l = strlen($text); $i < $l; $i++) { 
    echo $text[$i]; 
    if ($i % $number === $number - 1) { 
     echo "\n"; 
    } 
} 

另一種方法是找出有多少行有最終會,然後相應地提取子,並再次在正確的地方加入新行:

$linesTotal = ceil(strlen($text)/$number); 
for ($i = 0; $i < $linesTotal; $i++) { 
    echo substr($text, $i * $number, $number); 
    if ($i < $linesTotal - 1) { 
     echo "\n"; 
    } 
} 

這將是更好的解決方案,但在作業參數外:

echo trim(chunk_split($text, $number)); 
0

在此代碼中,我嘗試不使用類似strlen(),substr()(或甚至str_split()/array_splice())的函數。原來是這樣的:

$qt = 15; // with how many chars to break the string 
$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi semper, est non gravida venenatis, est neque fringilla quam, hendrerit ultrices justo turpis nec augue.'; 

$result = ''; 
$c = 0; 
$nl = '<br>'; // the break (could be /n, PHP_EOL, etc) 

while(isset($text[$c])){ // avoid using built-in function to check string size 
    $result .= $text[$c]; 
    $c++; 
    if($c % $qt == 0){ 
     $result .= $nl; 
    } 
} 

echo $result; 

輸出(帶有<pre>顯示alingned數量):

 
Lorem ipsum dol 
or sit amet, co 
nsectetur adipi 
scing elit. Mor 
bi semper, est 
non gravida ven 
enatis, est neq 
ue fringilla qu 
am, hendrerit u 
ltrices justo t 
urpis nec augue 
. 

看到它在行動here



我這樣做只是爲了練習。你應該嘗試一下你的東西。人們不能爲你學習邏輯。