2017-02-10 213 views
1

我使用nba.com網站here來製作我的每日NBA時間表,但他們改變了它的佈局,現在它包含更多數據。使用PHP,我能夠把PHP - 格式化字符串

這樣的:

5:00 PM ET 
LA Clippers 
Charlotte Hornets 
Spectrum Center 
Charlotte, NC 
GAME PREVIEWBUY TICKETS 

成這樣:

5:00 PM ET 
LA Clippers 
Charlotte Hornets 

不過,我有轉向那這個困難:

5:00 PM ET LA Clippers @ Charlotte Hornets 

我我甚至可以推薦其他語言,比如javascript/jquery,如果不是PHP,我可以將其實現爲用戶腳本。

有什麼建議嗎?

代碼我目前用來清理我不想要的單詞。

<?php 
$name = $_POST["teamname"]; 
$words = array("Spectrum Center","Charlotte, NC","Bankers Life Fieldhouse","Indianapolis, IN","Wells Fargo Center","Philadelphia, PA","Quicken Loans Arena","Cleveland, OH","bc","Chesapeake Energy Arena","Oklahoma City, OK","Toyota Center","Houston, TX","American Airlines Center","Dallas, TX","GAME PREVIEWBUY TICKETS","Vivint Smart Home Arena"," 
Salt Lake City, UT"); 
$name = str_replace($words,"",$name); 

if(isset($_POST["teamname"])){ 
    echo 'output:<br /><br /><textarea name="teamname" cols="80" rows="20" onclick="this.focus();this.select()">'.$name.'</textarea>'; 
    } 
?> 

編輯:加我的代碼。

+1

粘貼在你有已經如此這樣用戶就可以幫你修改的代碼。 – wogsland

+1

將您的最後一個換行符更改爲@。 relly需要看到你當前的代碼在這一個 – nogad

+0

添加我使用的PHP代碼。 – Slightz

回答

1

javascript你可以打電話串.split("\n"),然後用Array.prototype.splice()到一個或多個元素添加到陣列中,然後調用.join("")在陣列返回的字符串。

let data = `5:00 PM ET 
 
LA Clippers 
 
Charlotte Hornets 
 
Spectrum Center 
 
Charlotte, NC 
 
GAME PREVIEWBUY TICKETS`; 
 

 
let arr = data.split("\n").slice(0, 3); 
 
arr.splice(-1, 0, " @ "); 
 
arr.splice(1, 0, " "); 
 

 
console.log(arr.join(""));

給定的字符串在的jsfiddle,與"bc"在行26省略,你可以使用一個do..while循環,通過6增加一個變量來跳過下一日線前三條線。

let data = `5:00 PM ET 
 
LA Clippers 
 
Charlotte Hornets 
 
Spectrum Center 
 
Charlotte, NC 
 
GAME PREVIEWBUY TICKETS 
 
7:00 PM ET 
 
Milwaukee Bucks 
 
Indiana Pacers 
 
Bankers Life Fieldhouse 
 
Indianapolis, IN 
 
GAME PREVIEWBUY TICKETS 
 
7:30 PM ET 
 
Miami Heat 
 
Philadelphia 76ers 
 
Wells Fargo Center 
 
Philadelphia, PA 
 
GAME PREVIEWBUY TICKETS 
 
7:30 PM ET 
 
Denver Nuggets 
 
Cleveland Cavaliers 
 
Quicken Loans Arena 
 
Cleveland, OH 
 
GAME PREVIEWBUY TICKETS 
 
8:30 PM ET 
 
Golden State Warriors 
 
Oklahoma City Thunder 
 
Chesapeake Energy Arena 
 
Oklahoma City, OK 
 
GAME PREVIEWBUY TICKETS 
 
9:00 PM ET 
 
Phoenix Suns 
 
Houston Rockets 
 
Toyota Center 
 
Houston, TX 
 
GAME PREVIEWBUY TICKETS 
 
9:00 PM ET 
 
Orlando Magic 
 
Dallas Mavericks 
 
American Airlines Center 
 
Dallas, TX 
 
GAME PREVIEWBUY TICKETS 
 
10:00 PM ET 
 
Boston Celtics 
 
Utah Jazz 
 
Vivint Smart Home Arena 
 
Salt Lake City, UT`; 
 

 
let [arr, n, next, res] = [data.split("\n"), 0, 6, Array()]; 
 

 
do { 
 
    let curr = arr.slice(n, n + 3); 
 
    curr.splice(-1, 0, " @ "); 
 
    curr.splice(1, 0, " "); 
 
    res.push(curr.join("")); 
 
    n += next; 
 
} while (n + next < arr.length); 
 

 
console.log(res); 
 

 
var text = ""; 
 
var i; 
 
for (i = 0; i < res.length; i++) { 
 
    text += res[i] + "<br>"; 
 
} 
 
document.getElementById("demo").innerHTML = text;
<div id="demo"></div>

+0

我試過這個例子,但是當我添加多個團隊時,它只讀取第一個,我是否需要添加for循環? – Slightz

+0

是的。您可以使用'Promise.all()','fetch()'或'XMLHttpRequest()'請求N個團隊,然後迭代響應數組以對每個響應執行相同的操作。 – guest271314

+0

我試過for循環,但我只能從循環中獲得數組,如果我評論arr.splice(-1,0,「@」); arr.splice(1,0,「」);否則我只是第一次進入。 – Slightz