phparrayscakephpelement

CakePHP adding array elements to an array


I think I have my dumber-than-usual head on today.

I am trying to parse text from a textbox in a form to generate an array that I can pass to the find method in cakePHP.

I have used php regular expressions to generate an array of the terms entered (including "phrases included in speech marks" as single item)

This may look like this:

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

In the cakePHP cookbook it says that I have to get an array that looks like this (using above example):

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

Try as I might, I end up with arrays that do NOT look like an array of arrays.

Typically I am ending up with this horrible looking thing:

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%'
))

The code for the above is:

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

THis must be a common requirement, so I am hoping one of you guys could put me on the straight an narrow...

Thanks


Solution

  • If you're trying to build a search query (not clear what your goal is), your conditions should all be in the same array within an OR or AND - something like this:

    $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%'
            )
        )
    ));
    

    If you want to build it out in a foreach() loop, you can do it something like this:

    $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
    ));