回答編集履歴

6

追記

2016/08/02 10:00

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -108,9 +108,9 @@
108
108
 
109
109
  return [
110
110
 
111
- $tr->evaluate('normalize-space(.//td[1])'),
111
+ $tr->evaluate('normalize-space(.//td[1])')[0],
112
112
 
113
- $tr->evaluate('normalize-space(.//td[4])'),
113
+ $tr->evaluate('normalize-space(.//td[4])')[0],
114
114
 
115
115
  ];
116
116
 

5

修正

2016/08/02 10:00

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
 
50
50
 
51
- (冗長なので勝手に修正しましたが) もし希望されているように2重の配列構造がよければ
51
+ (冗長なので勝手に修正しましたが) もし希望されているように2重の配列構造がよければ,以下のようにします.
52
52
 
53
53
 
54
54
 
@@ -86,7 +86,7 @@
86
86
 
87
87
 
88
88
 
89
- - [GitHub - symfony/symfony - [DomCrawler] Add support for XPath expression evaluation](https://github.com/symfony/symfony/pull/19430)
89
+ - [GitHub(symfony/symfony) - [DomCrawler] Add support for XPath expression evaluation](https://github.com/symfony/symfony/pull/19430)
90
90
 
91
91
 
92
92
 

4

プルリクについて追記

2016/08/02 09:17

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
 
46
46
 
47
- ----
47
+ # 補足
48
48
 
49
49
 
50
50
 
@@ -79,3 +79,45 @@
79
79
  var_dump($list);
80
80
 
81
81
  ```
82
+
83
+
84
+
85
+ なお,
86
+
87
+
88
+
89
+ - [GitHub - symfony/symfony - [DomCrawler] Add support for XPath expression evaluation](https://github.com/symfony/symfony/pull/19430)
90
+
91
+
92
+
93
+ 上記で提示されているプルリクエストが採用されれば,今後以下のように書けるようになる可能性があります.
94
+
95
+
96
+
97
+ ```php
98
+
99
+ $list = $crawler->filterXPath('//tr[
100
+
101
+ position() <= 20 and
102
+
103
+ normalize-space(.//td[1]) != "" and
104
+
105
+ normalize-space(.//td[4]) != ""
106
+
107
+ ]')->each(function ($tr) {
108
+
109
+ return [
110
+
111
+ $tr->evaluate('normalize-space(.//td[1])'),
112
+
113
+ $tr->evaluate('normalize-space(.//td[4])'),
114
+
115
+ ];
116
+
117
+ });
118
+
119
+
120
+
121
+ var_dump($list);
122
+
123
+ ```

3

配列構造

2016/08/02 09:16

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -41,3 +41,41 @@
41
41
  var_dump($list);
42
42
 
43
43
  ```
44
+
45
+
46
+
47
+ ----
48
+
49
+
50
+
51
+ (冗長なので勝手に修正しましたが) もし希望されているように2重の配列構造がよければ
52
+
53
+
54
+
55
+ ```php
56
+
57
+ $list = $crawler->filterXPath('//tr[
58
+
59
+ position() <= 20 and
60
+
61
+ normalize-space(.//td[1]) != "" and
62
+
63
+ normalize-space(.//td[4]) != ""
64
+
65
+ ]')->each(function ($tr) {
66
+
67
+ return [[
68
+
69
+ trim($tr->filter('td')->eq(0)->text()),
70
+
71
+ trim($tr->filter('td')->eq(3)->text()),
72
+
73
+ ]];
74
+
75
+ });
76
+
77
+
78
+
79
+ var_dump($list);
80
+
81
+ ```

2

編集

2016/08/02 09:11

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  $list = $crawler->filterXPath('//tr[
20
20
 
21
- position() <= 20 and
21
+ position() <= 20 and
22
22
 
23
23
  normalize-space(.//td[1]) != "" and
24
24
 
@@ -28,9 +28,9 @@
28
28
 
29
29
  return [
30
30
 
31
- $tr->filter('td')->eq(0)->text(),
31
+ trim($tr->filter('td')->eq(0)->text()),
32
32
 
33
- $tr->filter('td')->eq(3)->text(),
33
+ trim($tr->filter('td')->eq(3)->text()),
34
34
 
35
35
  ];
36
36
 

1

追加

2016/08/02 08:47

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -3,3 +3,41 @@
3
3
 
4
4
 
5
5
  - [Yahoo!知恵袋 - PHPのループ処理で条件を付けたいのですが...](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13162349773)
6
+
7
+
8
+
9
+ ---
10
+
11
+
12
+
13
+ コード若干変わってるみたいなので書き直しますね
14
+
15
+
16
+
17
+ ```php
18
+
19
+ $list = $crawler->filterXPath('//tr[
20
+
21
+ position() <= 20 and
22
+
23
+ normalize-space(.//td[1]) != "" and
24
+
25
+ normalize-space(.//td[4]) != ""
26
+
27
+ ]')->each(function ($tr) {
28
+
29
+ return [
30
+
31
+ $tr->filter('td')->eq(0)->text(),
32
+
33
+ $tr->filter('td')->eq(3)->text(),
34
+
35
+ ];
36
+
37
+ });
38
+
39
+
40
+
41
+ var_dump($list);
42
+
43
+ ```