0

検索フォームがあり、ユーザーが本を書いている1人以上の著者を検索できるようにしたい。

文字列を配列に入れる次のコードがあります。

if (strpos($a,' ')||strpos($a,',')) {   
    $autore_diviso = explode(",", $a);              
    $dim=count($autore_diviso);
    $i=0;
    for ($i=0;$i<$dim;$i++)
    {
        $autore_diviso[$i]=trim($autore_diviso[$i]," ");    
        $autore_diviso[$i] = explode(" ", $autore_diviso[$i]);  
    }
    debug($autore_diviso);
}           


これは次のようなものを出力します:

Array(
[0] => Array
    (
        [0] => santone
    )

[1] => Array
    (
        [0] => anfossi
    )

[2] => Array
    (
        [0] => gli
    ) )



今、私はクエリのためにこのコードを持っています:

$t = $params['titolo'];
$e = $params['editore'];
$anno = $params['anno'];
$anno2 = $params['anno2'];
$conditions = array(    'editore LIKE' => "%$e%",
        'titolo LIKE' => "%$t%"
    );
if (isset($autore_diviso)) // if I have more than 1 author
{
    $dim=count($autore_diviso);
    $i=0;
    for ($i=0;$i<$dim;$i++)
    {
        $conditions['autori LIKE ?'] = array('OR' => array(
            '%' . $autore_diviso[$i][0] . '%'));
    } }
else
        $conditions[]=array('autori LIKE' => "%$a%");
if (!$anno&&!$anno2)    
    $conditions=$conditions;
else {
    if (!$anno)
        $conditions[] = array('anno <=' => "$anno2");          
    if (!$anno2)
            $conditions[] = array('anno >=' => "$anno");
        }
    if ($anno&&$anno2)
            $conditions[] = array('anno BETWEEN ? AND ?' => array($anno,$anno2));
      }


私の問題はこれです:

if (isset($autore_diviso)) // if I have more than 1 author
{
    $dim=count($autore_diviso);
    $i=0;
    for ($i=0;$i<$dim;$i++)
    {
        $conditions['autori LIKE ?'] = array('OR' => array(
            '%' . $autore_diviso[$i][0] . '%'));
    }
}



どの出力:

Array (
[editore LIKE] => %%
[titolo LIKE] => %%
[autori LIKE ?] => Array
    (
        [OR] => Array
            (
                [0] => %santone%
            )

    ))

私が検索する最後の著者はどれですか(例:anf、gli、santone)。
その配列を使用して、1人以上の著者を検索するにはどうすればよいですか?ありがとう。

4

1 に答える 1

0

私はこのように解決したと思います:

if (isset($autore_diviso)) {
$dim=count($autore_diviso);
$i=0;
while ($i<$dim)
{
    $conditions[]=array ('autori LIKE ?' => array(
        '%' . $autore_diviso[$i][0] . '%'));
    $i++;
} }
于 2013-02-27T15:43:11.990 に答える