2013-09-11 3 views
-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(); 

?> 

Проблема заключается в первых двух функциях - они случайным образом не могут найти символ подчеркивания. Фактически я позвонил более чем в 50 раз, чтобы получить правильные результаты. Добавлено и preg_match(), но только для того, чтобы знать, что я не уверен, имеет ли он правильное регулярное выражение.Странное поведение при поиске символа в строковых элементах массива

+0

Когда я запускаю его, первые два столбца всегда правильные. – Jim

+0

Да, в этом проблема. Stack is Debian + PHP 5.4.9 + lighty и из 1000 итераций У меня больше «не найдено», чем «найдено» – 1000Gbps

ответ

0

Вы хотите добавить новые элементы в $strstr, $strpos таблицы и так далее, и в конце концов вы for... и печать из этих таблиц, где $k ключи не обязательно должны существует.

Проверить var_dump или print_r на этих таблицах, и вы увидите, что на самом деле они есть элементы, но их показатели не совпадают с $array индексами (и я думаю, что это то, что вы хотите достичь).

Вы можете изменить foreach ($array as $key) к foreach ($array as $index => $key) и все вхождений как $strstr[] = "found"; к $strstr[$index] = "found"; (также и для других методов recognision), а затем запустить скрипт еще раз, чтобы увидеть результаты.

В последнем блоке (for($k = 0; $k < $arraysize; $k++)...) вы должны либо подтвердить, если $strstr[$k] (и другие массивы) существуют перед печатью, или распечатать эти массивы отдельно foreach.

Вы также можете сделать одну таблицу для получения результатов и сделать ее многомерной с именами функций в качестве ключей на первом уровне и поместить туда результаты.

+0

Ну, нет причин валид, если $ [k] isset для простого случая, я просто подсчитываю и сопоставление каждого из символов с символом «_». И нет, я не добавляю новые элементы, поэтому я печатаю в «табличном» варианте, чтобы быть более ясным, print_r и var_dump funcs показывают те же результаты. Массивы существуют, проблема заключается в «первых двух функциях», не возвращая true в случайных интервалах с почти такими же строками, как в массиве. – 1000Gbps

 Смежные вопросы

  • Нет связанных вопросов^_^