私は次のようなコードを書こうとしています:
- 人のリストを含む文字列 を
$currentAuthors
配列に変換し、$authors
各人がその配列の値になります。 - その配列の各人物を別の配列の各人物と比較し、それらが一致する場合は、値を and でラップします(
$authors
例として)。<a href="#">
</a>
- この配列から別の文字列を作成します。コンマ"、"、" および "区切り文字を使用して、文字列が読みやすくなるようにします。
基本的に、特定の人の名前をリンクにします。
コードはここにあり、これは機能します:
$currentAuthors = "Paul Peters, Joe Bloggs, Chloe Brown, Sarah Smith, Anna Smith and Mark Jones";
$linkableAuthors = array("Joe Bloggs","Anna Smith");
echo "Initial string: ".$currentAuthors."<br />";
// replace all instances of "and" with "," so all authors in $newAauthors are separated by a comma
$replaceAnds = str_replace(" and ", ",", $currentAuthors);
//create array from $currentAuthors, using comma as delimiter
$authors = explode(",", $replaceAnds );
$authorsCount = count($authors);
foreach ($authors as $key=>&$author) {
// Trim spaces from beginning and end of each author, if there are any
$author = trim($author);
foreach ($linkableAuthors as $linkableAuthor) {
// check if each value in $authors matches any of the $linkableAuthors, if so, make it a link.
if ($author == $linkableAuthor) {
$author = "<a href='#'>".$author."</a>";
}
}
}
$fullAuthorList = "";
// logic for recreating initial string with new links added in; creating separators
foreach ($authors as $key=>$authorFinal) {
$fullAuthorList .= $authorFinal;
if ($authorsCount==1) {
// do nothing, only one author
}
elseif ($key==$authorsCount-1) {
// do nothing, on last author
}
elseif ($key==$authorsCount-2) {
$fullAuthorList .= " and ";
}
else {
$fullAuthorList .= ", ";
}
}
$fullAuthorList .= "</p>";
echo "Final string: ".$fullAuthorList;
結果は次のとおりです。
最初のストリング: ポール・ピーターズ、ジョー・ブロッグス、クロエ・ブラウン、サラ・スミス、アンナ・スミス、マーク・ジョーンズ
最後のストリング: ポール・ピーターズ、ジョー・ブロッグス、クロエ・ブラウン、サラ・スミス、アンナ・スミス、マーク・ジョーンズ
ただし、このコードを関数にすると、Joe Bloggs と Anna Smith へのリンクが追加されなくなります。理由はありますか?値$authors
が適切に変更されていないのは何かに違いありません。
ここでコードが機能しない:
$currentAuthors = "Paul Peters, Joe Bloggs, Chloe Brown, Sarah Smith, Anna Smith and Mark Jones";
$linkableAuthors = array("Joe Bloggs","Anna Smith");
function getAuthors ($input) {
echo "Initial string: ".$input."<br />";
// replace all instances of "and" with "," so all authors in $newAauthors are separated by a comma
$replaceAnds = str_replace(" and ", ",", $input);
//create array from $currentAuthors, using comma as delimiter
$authors = explode(",", $replaceAnds );
$authorsCount = count($authors);
foreach ($authors as $key=>&$author) {
// Trim spaces from beginning and end of each author, if there are any
$author = trim($author);
foreach ($linkableAuthors as $linkableAuthor) {
// check if each value in $authors matches any of the $linkableAuthors, if so, make it a link.
if ($author == $linkableAuthor) {
$author = "<a href='#'>".$author."</a>";
}
}
}
$fullAuthorList = "";
// logic for recreating initial string with new links added in; creating separators
foreach ($authors as $key=>$authorFinal) {
$fullAuthorList .= $authorFinal;
if ($authorsCount==1) {
// do nothing, only one author
}
elseif ($key==$authorsCount-1) {
// do nothing, on last author
}
elseif ($key==$authorsCount-2) {
$fullAuthorList .= " and ";
}
else {
$fullAuthorList .= ", ";
}
}
$fullAuthorList .= "</p>";
echo "Final string: ".$fullAuthorList;
}
getAuthors($currentAuthors);
今回はリンクを追加せずに結果を表示します。
最初のストリング: ポール・ピーターズ、ジョー・ブロッグス、クロエ・ブラウン、サラ・スミス、アンナ・スミス、マーク・ジョーンズ
最後のストリング: ポール・ピーターズ、ジョー・ブロッグス、クロエ・ブラウン、サラ・スミス、アンナ・スミス、マーク・ジョーンズ
どうもありがとう!私はPHPを学ぶのが初めてです。