I'm attending CakeFest 2010!

8.5.12 classicExtract

array Set::classicExtract ($data, $path = null)

Gets a value from an array or object that is contained in a given path using an array path syntax, i.e.:

  • "{n}.Person.{[a-z]+}" - Where "{n}" represents a numeric key, "Person" represents a string literal
  • "{[a-z]+}" (i.e. any string literal enclosed in brackets besides {n} and {s}) is interpreted as a regular expression.
Example 1
$a = array(
	array('Article' => array('id' => 1, 'title' => 'Article 1')),
	array('Article' => array('id' => 2, 'title' => 'Article 2')),
	array('Article' => array('id' => 3, 'title' => 'Article 3')));
$result = Set::classicExtract($a, '{n}.Article.id');
/* $result now looks like:
	Array
	(
		[0] => 1
		[1] => 2
		[2] => 3
	)
*/
$result = Set::classicExtract($a, '{n}.Article.title');
/* $result now looks like:
	Array
	(
	    [0] => Article 1
	    [1] => Article 2
	    [2] => Article 3
	)
*/
$result = Set::classicExtract($a, '1.Article.title');
// $result == "Article 2"

$result = Set::classicExtract($a, '3.Article.title');
// $result == null
  1. $a = array(
  2. array('Article' => array('id' => 1, 'title' => 'Article 1')),
  3. array('Article' => array('id' => 2, 'title' => 'Article 2')),
  4. array('Article' => array('id' => 3, 'title' => 'Article 3')));
  5. $result = Set::classicExtract($a, '{n}.Article.id');
  6. /* $result now looks like:
  7. Array
  8. (
  9. [0] => 1
  10. [1] => 2
  11. [2] => 3
  12. )
  13. */
  14. $result = Set::classicExtract($a, '{n}.Article.title');
  15. /* $result now looks like:
  16. Array
  17. (
  18. [0] => Article 1
  19. [1] => Article 2
  20. [2] => Article 3
  21. )
  22. */
  23. $result = Set::classicExtract($a, '1.Article.title');
  24. // $result == "Article 2"
  25. $result = Set::classicExtract($a, '3.Article.title');
  26. // $result == null
Example 2
$a = array(
	0 => array('pages' => array('name' => 'page')),
	1 => array('fruites'=> array('name' => 'fruit')),
	'test' => array(array('name' => 'jippi')),
	'dot.test' => array(array('name' => 'jippi'))
);

$result = Set::classicExtract($a, '{n}.{s}.name');
/* $result now looks like: 
Array
	(
	    [0] => Array
	        (
	            [0] => page
	        )
	    [1] => Array
	        (
	            [0] => fruit
	        )
	)
*/
$result = Set::classicExtract($a, '{s}.{n}.name');
/* $result now looks like: 
	Array
	(
	    [0] => Array
	        (
	            [0] => jippi
	        )
	    [1] => Array
	        (
	            [0] => jippi
	        )
	)
*/
$result = Set::classicExtract($a,'{\w+}.{\w+}.name');
/* $result now looks like: 
	Array
	(
	    [0] => Array
	        (
	            [pages] => page
	        )
	    [1] => Array
	        (
	            [fruites] => fruit
	        )
	    [test] => Array
	        (
	            [0] => jippi
	        )
	    [dot.test] => Array
	        (
	            [0] => jippi
	        )
	)
*/
$result = Set::classicExtract($a,'{\d+}.{\w+}.name');
/* $result now looks like: 
	Array
	(
	    [0] => Array
	        (
	            [pages] => page
	        )
	    [1] => Array
	        (
	            [fruites] => fruit
	        )
	)
*/
$result = Set::classicExtract($a,'{n}.{\w+}.name');
/* $result now looks like: 
	Array
	(
	    [0] => Array
	        (
	            [pages] => page
	        )
	    [1] => Array
	        (
	            [fruites] => fruit
	        )
	)
*/
$result = Set::classicExtract($a,'{s}.{\d+}.name');
/* $result now looks like: 
	Array
	(
	    [0] => Array
	        (
	            [0] => jippi
	        )
	    [1] => Array
	        (
	            [0] => jippi
	        )
	)
*/
$result = Set::classicExtract($a,'{s}');
/* $result now looks like: 
	Array
	(

	    [0] => Array
	        (
	            [0] => Array
	                (
	                    [name] => jippi
	                )
	        )
	    [1] => Array
	        (
	            [0] => Array
	                (
	                    [name] => jippi
	                )
	        )
	)
*/
$result = Set::classicExtract($a,'{[a-z]}');
/* $result now looks like: 
	Array
	(
	    [test] => Array
	        (
	            [0] => Array
	                (
	                    [name] => jippi
	                )
	        )

	    [dot.test] => Array
	        (
	            [0] => Array
	                (
	                    [name] => jippi
	                )
	        )
	)
*/
$result = Set::classicExtract($a, '{dot\.test}.{n}');
/* $result now looks like: 
	Array
	(
	    [dot.test] => Array
	        (
	            [0] => Array
	                (
	                    [name] => jippi
	                )
	        )
	)
*/
  1. $a = array(
  2. 0 => array('pages' => array('name' => 'page')),
  3. 1 => array('fruites'=> array('name' => 'fruit')),
  4. 'test' => array(array('name' => 'jippi')),
  5. 'dot.test' => array(array('name' => 'jippi'))
  6. );
  7. $result = Set::classicExtract($a, '{n}.{s}.name');
  8. /* $result now looks like:
  9. Array
  10. (
  11. [0] => Array
  12. (
  13. [0] => page
  14. )
  15. [1] => Array
  16. (
  17. [0] => fruit
  18. )
  19. )
  20. */
  21. $result = Set::classicExtract($a, '{s}.{n}.name');
  22. /* $result now looks like:
  23. Array
  24. (
  25. [0] => Array
  26. (
  27. [0] => jippi
  28. )
  29. [1] => Array
  30. (
  31. [0] => jippi
  32. )
  33. )
  34. */
  35. $result = Set::classicExtract($a,'{\w+}.{\w+}.name');
  36. /* $result now looks like:
  37. Array
  38. (
  39. [0] => Array
  40. (
  41. [pages] => page
  42. )
  43. [1] => Array
  44. (
  45. [fruites] => fruit
  46. )
  47. [test] => Array
  48. (
  49. [0] => jippi
  50. )
  51. [dot.test] => Array
  52. (
  53. [0] => jippi
  54. )
  55. )
  56. */
  57. $result = Set::classicExtract($a,'{\d+}.{\w+}.name');
  58. /* $result now looks like:
  59. Array
  60. (
  61. [0] => Array
  62. (
  63. [pages] => page
  64. )
  65. [1] => Array
  66. (
  67. [fruites] => fruit
  68. )
  69. )
  70. */
  71. $result = Set::classicExtract($a,'{n}.{\w+}.name');
  72. /* $result now looks like:
  73. Array
  74. (
  75. [0] => Array
  76. (
  77. [pages] => page
  78. )
  79. [1] => Array
  80. (
  81. [fruites] => fruit
  82. )
  83. )
  84. */
  85. $result = Set::classicExtract($a,'{s}.{\d+}.name');
  86. /* $result now looks like:
  87. Array
  88. (
  89. [0] => Array
  90. (
  91. [0] => jippi
  92. )
  93. [1] => Array
  94. (
  95. [0] => jippi
  96. )
  97. )
  98. */
  99. $result = Set::classicExtract($a,'{s}');
  100. /* $result now looks like:
  101. Array
  102. (
  103. [0] => Array
  104. (
  105. [0] => Array
  106. (
  107. [name] => jippi
  108. )
  109. )
  110. [1] => Array
  111. (
  112. [0] => Array
  113. (
  114. [name] => jippi
  115. )
  116. )
  117. )
  118. */
  119. $result = Set::classicExtract($a,'{[a-z]}');
  120. /* $result now looks like:
  121. Array
  122. (
  123. [test] => Array
  124. (
  125. [0] => Array
  126. (
  127. [name] => jippi
  128. )
  129. )
  130. [dot.test] => Array
  131. (
  132. [0] => Array
  133. (
  134. [name] => jippi
  135. )
  136. )
  137. )
  138. */
  139. $result = Set::classicExtract($a, '{dot\.test}.{n}');
  140. /* $result now looks like:
  141. Array
  142. (
  143. [dot.test] => Array
  144. (
  145. [0] => Array
  146. (
  147. [name] => jippi
  148. )
  149. )
  150. )
  151. */