this is my code:
$searchfor = array();
$searchfor[0] = 'INT.';
$searchfor[1] = 'EXT.';
// get the file contents, assuming the file to be readable (and exist)
$contents = file_get_contents($file);
// escape special characters in the query
$pattern = preg_quote($searchfor[0], '/');
// finalize the regular expression, matching the whole line
$pattern = "/^.*$pattern.*\$/m";
// search, and store all matching occurences in $matches
if(preg_match_all($pattern, $contents, $matches)){
echo "<div class='int'>".implode("\n", $matches[0])."</div>\n";
}else{
echo "No matches found";
}
开发者_JAVA技巧How can i take the results and out each array item into an array of DIVs?
right now the output looks like this
<div class="int">INT 1</div>
INT 2
but I have like 150 instances of where INT. is found in my file so I was wanting to get it to show like this:
<div class="int" id="1">INT 1</div>
<div class="int" id="2">INT 2</div>
<div class="int" id="3">INT 3</div>
<div class="int" id="4">INT 4</div>
<div class="int" id="5">INT 5</div>
<div class="int" id="6">INT 6</div>
<div class="int" id="7">INT 7</div>
<div class="int" id="8">INT 8</div>
and so on...
Any suggestions?
UPDATED CODE:
echo '<div id="int-div" style="width: 738px; height: 100%; border: 1px solid #000; padding: 5px; background-color: #FFF;">';
$searchfor = array();
$searchfor[0] = 'INT.';
$searchfor[1] = 'EXT.';
$searchfor[2] = 'I/E.';
// get the file contents, assuming the file to be readable (and exist)
$contents = file_get_contents($file);
// escape special characters in the query
$pattern = preg_quote($searchfor[0], '/');
// finalize the regular expression, matching the whole line
$pattern = "/^.*$pattern.*\$/m";
// search, and store all matching occurences in $matches
if(preg_match_all($pattern, $contents, $matches)){
$row = 0;
foreach($matches as $match)
{
echo "<ol><li><div class='int' id='".$row."'>".implode("</div></li><li><div class='int' id='".$row."'>", $match)."</div></li></ol>\n";
$row++;
}
}else{
echo "No matches found";
}
echo '</div>';
UPDATES RESULTS:
<ol>
<li>
<div class="int" id="0">INT. STRAWBERRY'S BEDROOM - MORNING</div>
</li>
<li>
<div class="int" id="0">INT. PALO TORCIDO HIGH SCHOOL, CLASSROOM - MORNING</div>
</li>
<li>
<div class="int" id="0">INT. DUNKIN' DONUTS - MORNING</div>
</li>
<li>
<div class="int" id="0">INT. DUNKIN' DONUTS - MORNING</div>
<li>
<div class="int" id="0">INT. DUNKIN' DONUTS - EARLY MORNING (FLASHBACK)</div>
</li>
<li>
<div class="int" id="0">INT. FUENTES RESIDENCE, KITCHEN - NIGHT (PRESENT)</div>
</li>
<li>
use a foreach
and use the keys as your id:
if(preg_match_all($pattern, $contents, $matches))
{
$row = 0;
foreach($matches as $match)
{
echo "<div class='int' id='".$row."'>".implode("\n", $match)."</div>\n";
$row++;
}
}else{
echo "No matches found";
}
You can avoid messy quote escaping and concatenation by creating a template string and using printf()
. Notice the placeholders and the two variables that relate to them.
Code: (Demo)
$matches = [
[
"INT. STRAWBERRY'S BEDROOM - MORNING",
"INT. PALO TORCIDO HIGH SCHOOL, CLASSROOM - MORNING",
"INT. DUNKIN' DONUTS - MORNING",
"INT. DUNKIN' DONUTS - MORNING",
"INT. DUNKIN' DONUTS - EARLY MORNING (FLASHBACK)",
"INT. FUENTES RESIDENCE, KITCHEN - NIGHT (PRESENT)",
]
];
$liTemplate = <<<HTML
<li><div class="int" id="%d">%s</div></li>
HTML;
if ($matches) {
echo "<ol>\n";
foreach ($matches[0] as $i => $match) {
printf($liTemplate, $i + 1, $match);
}
echo "</ol>";
}
Output:
<ol>
<li><div class="int" id="1">INT. STRAWBERRY'S BEDROOM - MORNING</div></li>
<li><div class="int" id="2">INT. PALO TORCIDO HIGH SCHOOL, CLASSROOM - MORNING</div></li>
<li><div class="int" id="3">INT. DUNKIN' DONUTS - MORNING</div></li>
<li><div class="int" id="4">INT. DUNKIN' DONUTS - MORNING</div></li>
<li><div class="int" id="5">INT. DUNKIN' DONUTS - EARLY MORNING (FLASHBACK)</div></li>
<li><div class="int" id="6">INT. FUENTES RESIDENCE, KITCHEN - NIGHT (PRESENT)</div></li>
</ol>
精彩评论