У меня есть цикл foreach, который занимает много времени:
$someHugeArray = [...]; // having beyond 300 to 1000 items
foreach ($someHugeArray as $item) {
$this->applyTimeConsumingMagic($item);
}
При отладке этого я стараюсь избегать итерации всех их элементов, поэтому я часто пишу escape-код по строкам:
foreach ($someHugeArray as $i => $item) {
$this->applyTimeConsumingMagic($item);
if ($i > 10) { break; } // @fixme: should not go live
}
И, как отмечается в комментарии, нечто подобное когда-то появилось, и я почувствовал себя любителем.
Есть ли способ сломать foreach
цикл из сеанса XDebug без написания кода var_dumpy? В качестве IDE я использую PhpStorm.
Я не нашел способа разорвать цикл foreach на лету, но лучшее, что можно сделать, это уменьшить размер массива на лету.
Evaluate expression
Окно отладки или использование ярлыка phpstorm, по умолчанию должно быть Alt + сдвиг + 8$someHugeArray = array_slice($someHugeArray, $offset = 0, $length = 10);
Кроме того array_slice можно также использовать array_filter если кто-то хочет фильтровать по более конкретным условиям, используя замыкание.
Теперь у вас есть небольшой массив, вы можете наслаждаться быстрым временем выполнения, не беспокоясь о том, чтобы очиститься после сеанса отладки.
Это прервет цикл на 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
}