-2
<?php

ini_set('error_reporting', '-1');
ini_set('display_errors', '1');
ini_set('apc.enabled', '0');
gc_enable();

$array = array("php", "php_php", "php_php", "php_php", "php");
$arraysize = count($array);
$style = " style='border: 1px solid black;'";
$strcmpcharcount = 0;
$equalcmpcharcount = 0;

foreach ($array as $key)
{
  $strcmpcharcount = 0;
  $equalcmpcharcount = 0;

  if (strstr($key, "_") !== false)
  {
    $strstr[] = "found";
    $explodedstring1[] = explode("_", $key);
  }
  else
  {
    $strstr[] = "not found";
    $explodedstring1[] = "not found";
  }

  if (strpos($key, "_") !== false)
  {
    $strpos[] = "found";
    $explodedstring2[] = explode("_", $key);
  }
  else
  {
    $strpos[] = "not found";
    $explodedstring2[] = "not found";
  }

  if (preg_match("/[^_+$]/", $key))
  {
    $preg_match[] = "found";
    $explodedstring3[] = explode("_", $key);
  }
  else
  {
    $preg_match[] = "not found";
    $explodedstring3[] = "not found";
  }

  $keysize = strlen($key);
  for ($i = 0; $i < $keysize; $i++)
  {
    if (strcmp($key[$i], "_") === 0) { $strcmpcharcount++; }
  }

  for ($j = 0; $j < $keysize; $j++)
  {
    if ($key[$j] === "_") { $equalcmpcharcount++; }
  }

  if ($strcmpcharcount > 0)
  {
    $strcmp[] = "found";
    $explodedstring4[] = explode("_", $key);
  }
  else
  {
    $strcmp[] = "not found";
    $explodedstring4[] = "not found";
  }

  if ($equalcmpcharcount > 0)
  {
    $equalcmp[] = "found";
    $explodedstring5[] = explode("_", $key);
  }
  else
  {
    $equalcmp[] = "not found";
    $explodedstring5[] = "not found";
  }
}
echo "<table$style>
<th$style>
<tr>
<td$style>strstr()</td>
<td$style>strpos()</td>
<td$style>preg_match()</td>
<td$style>strcmp()</td>
<td$style>'==='</td>
</tr>
</th>";
for($k = 0; $k < $arraysize; $k++)
{
  echo "<tr>
  <td$style>$strstr[$k]</td>
  <td$style>$strpos[$k]</td>
  <td$style>$preg_match[$k]</td>
  <td$style>$strcmp[$k]</td>
  <td$style>$equalcmp[$k]</td>
  </tr>";
}
echo "</table>";

exit();

?>

問題は最初の 2 つの関数にあります。アンダースコア文字をランダムに見つけることができません。実際、適切な結果を得るためにスクリプトを 50 回以上呼び出しました。preg_match() テストを追加しましたが、有効な正規表現があるかどうかはわかりません。

4

1 に答える 1

0

$strstr$strposテーブルなどに新しい要素を追加し、最終的には、キーが必ずしも存在する必要がないfor...これらのテーブルから印刷します。$k

これらのテーブルを確認var_dumpするprint_rと、実際には要素を取得していることがわかりますが、それらのインデックスはインデックスと一致していません$array(それがあなたが達成したいことだと思います)。

およびすべてのオカレンスを(他の認識方法でも) に変更foreach ($array as $key)してから、スクリプトを再度実行して結果を確認できます。foreach ($array as $index => $key)$strstr[] = "found";$strstr[$index] = "found";

最後のブロック ( )では、印刷する前に (および他の配列) が存在するfor($k = 0; $k < $arraysize; $k++)...かどうかを検証するか、これらの配列を で個別に印刷する必要があります。$strstr[$k]foreach

結果のテーブルを 1 つ作成し、最初のレベルで関数名をキーとして多次元化し、そこに結果を入れることもできます。

于 2013-09-11T07:12:18.460 に答える