2013-11-15 1 views
0

Я думаю, что сегодня у меня своя голова, чем обычно.CakePHP добавляет элементы массива к массиву

Я пытаюсь разобрать текст из текстового поля в форме, чтобы сгенерировать массив, который я могу передать методу find в cakePHP.

Я использовал PHP регулярных выражений для создания массива терминов вошли (в том числе «фразы, включенные в речевых знаков» в качестве одного элемента)

Это может выглядеть следующим образом:

array(
(int) 0 => 'test', 
(int) 1 => 'this out', 
(int) 2 => 'now') 

В CakePHP поваренной книги он говорит, что я должен получить массив, который выглядит следующим образом (с помощью описанного выше примера):

array(
array('ProjectDocumentSectionVariable.variable_description LIKE' => '%test%'), 
array('ProjectDocumentSectionVariable.variable_description LIKE' => '%this out%'), 
array('ProjectDocumentSectionVariable.variable_description LIKE' => '%now%')) 

Try как я мог, я в конечном итоге с массивами, которые не похожи массив массивов.

Обычно я в конечном итоге с этой ужасной выглядящей вещью:

array(
(int) 0 => array(
    'ProjectDocumentSectionVariable.variable_description LIKE' => '%test%' 
), 
(int) 1 => array(
    'ProjectDocumentSectionVariable.variable_description LIKE' => '%this out%' 
), 
(int) 2 => array(
    'ProjectDocumentSectionVariable.variable_description LIKE' => '%now%' 
)) 

Код вышеперечисленным:

$i = 0; 
      foreach($matches[1] as $match) : 
       $searcharray['ProjectDocumentSectionVariable.variable_description LIKE'] = "%" . $match . "%";     
       array_push($array_full,$searcharray); 
       $i++; 
      endforeach; 

THis должен быть общим требованием, поэтому я надеюсь один из вас ребята могли бы поставить меня на прямой узкий ...

Благодарности

+0

Пожалуйста, отредактируйте, чтобы использовать фактические имена моделей и полей - это помогает понять вопрос. Ваша нижняя часть и ваш раздел «надеясь на этот» не выстраиваются в линию по именам, что делает ее запутанной. Также - что такое ваш «матчи»? И ваш поисковый ракурс? – Dave

+0

Да, извините Дэйв - не торопитесь быстрее. Массив матчей - тот, который показан вверху, выходящий из обработки выражения reg содержимого текстового поля. $ Searcharray установлен на линии, о которой он впервые упоминается ... Я думаю. (Кажется, он ведет себя «правильно» - но может быть, где я ошибаюсь!) –

ответ

1

Если вы Пытаетесь построить поисковый запрос (не ясно, что ваша цель), ваши условия должны быть все в одном массиве в пределах OR или AND - что-то вроде этого:

$searchResults = $this->find('all', array(
    'conditions' => array(
     'OR' => array(
      'ProjectDocumentSectionVariable.variable_description LIKE' => '%test%', 
      'ProjectDocumentSectionVariable.variable_description LIKE' => '%this out%', 
      'ProjectDocumentSectionVariable.variable_description LIKE' => '%now%' 
     ) 
    ) 
)); 

Если вы хотите построить его в foreach() цикле, вы можете сделать это что-то вроде этого:

$conditions = array('OR' => array()); 
$matches = array('test', 'this out', 'now'); 
foreach($matches as $match) { 
    array_push($conditions['OR'], array('variable_description LIKE' => '%' . %match . '%')); 
} 

$searchResults = $this->find('all', array(
    'conditions' => $conditions 
)); 
+0

Да, я пытаюсь это сделать ... Спасибо за ваше время. цикл foreach выше оставляет массив условий только с одним элементом - последним элементом в массиве $ matches ... любыми другими идеями? –

+0

Ah duh - исправлено. – Dave

+0

updated - забыли, что вам нужно, чтобы он находился в массиве 'AND' или' OR'. – Dave

0

его так же просто, как это:

$array= array(); 
    foreach ($colors as $c): 
     $uniques[] = $c; 
    endforeach; 

не имея [ ] будет рассматривать его как регулярную переменную. Это добавит его в массив