2010-11-10 3 views
0

Я хочу знать, в конце концов, сколько успехов и неудач у меня есть. Я хотел бы использовать функцию массива, но я не знаю, как дальше отсюда:php - количество элементов массива

public function array_internal($the_string) 
$pass= Array(); 
$failed = Array(); 
    if(strstr($the_string,"Success")) 
    { 
     $pass[] = +1; 
    } 
    else 
    { 
     $failed[] = +1; 
    } 

count($pass); 

Этот шаг выполняется каждую функцию утверждать, как это:

try { 
     $this->assertEquals("off", $this->getValue("page")); 
     throw new PHPUnit_Framework_AssertionFailedError("Success"); 
    } catch (PHPUnit_Framework_AssertionFailedError $e) { 
     $this->array_internal($e->toString()); 
    } 

Функция само по себе хорошо. моя проблема только с прилавком.

Спасибо!

Редактировать Я пытался сделать что-то вроде этого:

$pass= 0; 
$failed = 0; 
public function array_internal($the_string) 

    if(strstr($the_string,"Success")) 
    { 
     $pass += 1; 
    } 
    else 
    { 
     $failed += 1; 
    } 

$pass; 

ответ

2

Вы ничего не делаете с массивом, кроме подсчета, так почему бы не просто использовать целое число?

$pass= 0; 
$failed = 0; 


public function array_internal($the_string) 

    global $pass, $failed; 

    if(strstr($the_string,"Success")) 
    { 
     $pass += 1; 
    } 
    else 
    { 
     $failed += 1; 
    } 

} 
+0

Я думаю, что 'array_internal' вызывается несколько раз, так как не существует цикл в функции. Глобальные переменные были бы лучше. - Я вижу, что вы обновили свой ответ;) – Harmen

+0

@ Хармен да, я взял инициализацию, но исходный вопрос также сбрасывал ее каждый раз. Я согласен, что они должны быть глобальными или обрабатываться каким-то другим способом. – Fosco

+0

не могли бы вы объяснить мне, как сделать тогда глобальные вары? (и да, 'array_internal' вызывается несколько раз) – Ronny

2

Почему вы просто не использовать глобальные переменные, как $pass и $fail, которые можно увеличить с помощью $pass++ и $fail++?

1
public function array_internal($the_string) 
$pass=0; 
$failed=0; 
if (strstr($the_string,"Success")) 
{ 
    $pass += 1; 
} 
else 
{ 
    $failed += 1; 
} 
+0

Я пробовал это, но $ pass 0 в конце. – Ronny

+0

@ronny: тогда у вас есть ошибка в этом 'if (strstr ($ the_string,« Success »)) ' – Svisstack

1

$pass[] = +1 создает новую пару ключ значение в $pass массиве, и добавляет 1 к новому значению. Вероятно, это не то, что вы хотите сделать. См. Другие ответы, которые вы хотите сделать.

0
$pass= Array(); 
$failed = Array(); 

Создает новые экземпляры массива. Возвращаемое значение вашей функции array_internal всегда будет 0 или 1. Вы также никогда не используете $failed.

Намного проще функция будет:

public function array_internal($the_string) 
    $pass = 0; 
    if(strstr($the_string, "Success")) 
    {    
     $pass = 1; 
    } 
    return $pass; 
} 

Как Harmen сказал, что вам нужно использовать внешний INT счетчик. В отличие от Harmen, я постараюсь не использовать глобальную переменную, если это возможно, но переменную класса, чтобы ограничить ее область.

Может быть статическая переменная класса, TestClass, называется $passes как:

TestClass::$passes += $this->array_internal($e->toString()); 
Смежные вопросы