2015-08-04 4 views
2

У меня есть цикл Еогеаспа, и это делает какое-то время потребляя материал:Как разорвать цикл foreach с сеанса XDebug?

$someHugeArray = [...]; // having beyond 300 to 1000 items 

foreach ($someHugeArray as $item) { 
    $this->applyTimeConsumingMagic($item); 
} 

При отладке этого я стараюсь избегать перебора всех из них предметов, поэтому я часто пишу код бежать вдоль линий:

foreach ($someHugeArray as $i => $item) { 
    $this->applyTimeConsumingMagic($item); 

    if ($i > 10) { break; } // @fixme: should not go live 
} 

И, как отмечается в комментарии, что-то подобное произошло однажды, и я почувствовал себя любителем.

Есть ли способ разбить цикл foreach с сеанса XDebug без написания кода var_dumpy? В качестве IDE я использую PhpStorm.

ответ

3

Я не нашел способ разорвать петлю foreach на лету, но самое лучшее, что можно сделать - это уменьшить размер массива на лету.

  • Установите точку останова после того, как вы настроили свой массив, в лучшем случае до начала цикла. (Это действительно работает внутри цикла, а, тем не менее может иметь странное поведение)
  • Выберите Evaluate expression PhpStorm-х отлаживать окно или использовать ярлык, по умолчанию должно быть Alt + сдвиг +
  • пробег $someHugeArray = array_slice($someHugeArray, $offset = 0, $length = 10);

Кроме array_slice можно также использовать array_filter, если вы хотите фильтровать более конкретные условия с помощью крышки.

Теперь у вас есть небольшой массив, наслаждайтесь быстрым временем выполнения без необходимости беспокоиться, чтобы очистить после сеанса отладки.

0

Это будет разорвать петлю на 10-е пробегает - но, очевидно, может быть установлен, чтобы сказать 2 или 3 и т.д.:

$myArray = $this->getHugeDataArray(); 
$i  = 0; //here we set i to 0 so we can count to 10 

foreach ($myArray as $key => $value) 
{ 
    $i++; 
    if ($i == 9) {break;} 

    //rest of actual code 
} 
+0

Опасность такого подхода заключается в том, что она будет являться частью кодового и, следовательно, склонный к ошибочным фиксациям. Мой вопрос заключался в том, чтобы противостоять этой самой проблеме. Если вы также будете использовать это в функции «Оценить выражение» phpstorm, то это недостаток в том, что он гораздо более подробный, чем 'array_slice'. – k0pernikus

+0

@ k0pernikus хорошая точка, хотя вам не нужно хранить ее в коде;) ха-ха, но я могу удалить, если вы предпочитаете? :) – ThisGuyHasTwoThumbs

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