2012-10-09 1 views
8

에서 데이터를 추출하기 :CakePHP의 해시 클래스를 사용하여 I 배열이 같은이 배열

Array(
    [Rating] => Array(
     [0] => Array(
      [id] => 4 
      [rating] => -1 
     ), 
     [1] => Array(
      [id] => 14 
      [rating] => 9.7 
     ), 
     [2] => Array(
      [id] => 26 
      [rating] => 9.55 
     ) 
    ) 
) 

나는이 모든 배열의 평가> = 0, 그냥 숫자를 추출해야합니다. 나는 이걸로 잘하고 있었어 Set::extract('/Rating/rating[rating>-1]', $video)

그러나 나는 이것을 배웠고 이제는 해시 클래스를 사용해야한다고 배웠다. 그래서 새로운 구문을 고개를 썼다 : 나에게 정확한 결과를 제공

Hash::extract($video, 'Rating.{n}.rating[rating>-1]'); 

를하지만 성가신 경고 제공 : 나는 조건이 없을 때 Warning (4096): Argument 1 passed to Hash::_matches() must be an array, string given, called in E:\www\lib\Cake\Utility\Hash.php on line 131 and defined [CORE\Cake\Utility\Hash.php, line 170]

경고가 발생하지 않습니다 그곳에는 ([rating>-1]) 물론 나는 -1을 포함하고 있습니다. 나는 그것을 원하지 않습니다. 여기서 내가 뭘 잘못하고 있니? 이 함수를 어떻게 든 오용하고 있습니까? 사용되지 않는 Set 클래스를 사용해야합니까? 또는이 앱을 프로덕션 모드로 설정하면 표시되지 않으므로 경고를 무시해야합니까?

답변

16

이 질문은 오래되었지만 이미 해결되었지만 CakePHP 문서는 해시 경로 구문 사용과 관련하여 약간 명확하지 않습니다. 그래서 누군가 다른 사람이이 문제를 겪었을 때, 여기 내가 찾은 것이 있습니다.

질문의 구문이 올바르지 않습니다. 올바른 구문은 'Hash::extract($ratings, 'Rating.{n}[rating>-1].rating')'입니다. 설명서에 따르면

" 토큰 두 개의 그룹으로 구성되어 표현식 어레이 데이터를 이송하는데 사용된다 정합 기 요소를 한정하기 위해 사용되는 동안..."

{n}[rating>-1]토큰으로 간주됩니다. {n}은 배열 키를 필터링하는 표현식 인 입니다.이 경우 키는 숫자 여야합니다. [rating>-1]은 배열 요소를 필터링하는입니다.이 경우 요소는 rating이라는 키와 -1보다 큰 값이 포함 된 배열이어야합니다. 배열 요소가 있으면 rating을 얻을 수 있습니다.

$ratings = array(
     'Rating' => array(
      array(
       'id' => 4, 
       'rating' => -1 
      ), 
      array(
       'id' => 14, 
       'rating' => 9.7 
      ), 
      array(
       'id' => 26, 
       'rating' => 9.55 
      ) 
     ) 
    ); 
    print_r(Hash::extract($ratings, 'Rating.{n}[rating>-1].rating')); 

결과 :

Array ([0] => 9.7 [1] => 9.55)