У меня такой вид HTML (упрощение здесь).
<ul>
<li>
<div class="name">Name 1</div>
<div class="phone">phone 1</div>
</li
<li>
<div class="name">Name 2</div>
// no div available here
</li
<li>
<div class="name">Name 3</div>
<div class="phone">phone 3</div>
</li
</ul>
xPaths выглядят так,
$names = $crawler->filterXPath('//ul//li//div[@class="name"]')->extract('_text');
$phones = $crawler->filterXPath('//ul//li//div[@class="phone"]')->extract('_text');
Он возвращает эти массивы,
$names = array(
0 => Name 1
1 => Name 2
2 => Name 3
)
$phones = array(
0 => Phone 1
1 => Phone 3
)
Теперь я хочу, если xpath не найдет div в индексе 1, он должен быть заменен на null или пустым.
Поэтому индексы обоих этих массивов должны быть такими же, как,
$phones = array(
0 => Phone 1
1 => null or empty
2 => Phone 3
)
Я думаю, вам нужны ассоциированные телефоны и имена... Этот ответ не совсем то, что вы хотите, но вы можете объединить два запроса
//ul//li//div[@class="name"] | //ul//li//div[@class="phone"]
и получил узлы в порядке, подобном этому
<div class="name">Name 1</div>
<div class="phone">phone 1</div>
<div class="name">Name 2</div>
<div class="name">Name 3</div>
<div class="phone">phone 3</div>
а затем просто проверьте порядок в коде.