0

如何打印此数组:

array
      0 => 
        array
          'Shift.name LIKE' => string '%Burberry%' (length=10)
      1 => 
        array
          'Shift.name LIKE' => string '%Butchery%' (length=10)

像这样:

array 
  'Shift.name LIKE' => string '%Burberry%' (length=10)  
  'Shift.name LIKE' => string '%Butchery%' (length=10)

到目前为止我写的:

$skillAux =array(); $i=0;
foreach ($skillNames as $name){
                    $skillAux[$i] = array('Shift.name LIKE'=>'%'.$name.'%');
                    $i++;                
                }
4

4 回答 4

3

数组键(索引)必须是唯一的

首先,(关联)中的“键”应该是唯一的,因此要努力实现这一点;

array (
  'Shift.name LIKE' => '%Burberry%'  
  'Shift.name LIKE' => '%Butchery%'
)

与尝试这样做是一样的;

$myArray = array();

$myArray['Shift.name LIKE'] = '%Burberry%';
$myArray['Shift.name LIKE'] = '%Butchery%';

换句话说,您正在覆盖“Shift.name LIKE”键的先前值,因此您最终只会得到最后一个值;

var_dump($myArray);

//The last value has overwritten the previous one, so you'll 
//only have 1 value in the array:
array(
    'Shift.name LIKE' string '%Butchery%' (length=10)
)

在 CakePHP 中为不同字段创建“或”条件

您可能会感到困惑,因为在为不同字段创建“或”条件时,您可以这样做;

$results = $this->Shift->find('all', array(
    'conditions' => array(
        'OR' => array(
            'Shift.name LIKE' => '%Burberry%',
            'Shift.something' => 'something',
        ),
    ),
));

这将执行类似的操作;

SELECT * 
FROM shifts AS Shift
WHERE Shift.name LIKE '%Burberry%' OR Shift.something = 'something';

但是,如果您需要对同一字段执行此操作,这将不起作用(如我回答的第一部分所述)

在 CakePHP中为单个字段创建“或”条件

正如您的评论之一所述,您正在尝试为CakePHP中的单个字段创建“或”条件。

基本上,您需要做的是创建多个关联数组并将它们包装在一个非关联数组中(实际上,这是您在第一个示例中得到的)

像这样;

array(
    'OR' => array(
        array('Shift.name LIKE' => '%Burberry%'),
        array('Shift.name LIKE' => '%Butchery%'),
    )
)

哪个可以这样使用;

$results = $this->Shift->find('all', array(
    'conditions' => array(
        'OR' => array(
            array('Shift.name LIKE' => '%Burberry%'),
            array('Shift.name LIKE' => '%Butchery%'),
        ),
        // other conditions can be put here
        // for example 'Shift.status' => 1
    ),
));

这将执行类似的操作;

SELECT * 
FROM shifts AS Shift
WHERE Shift.name LIKE '%Burberry%' OR Shift.name LIKE '%Butchery%';

例子

以编程方式创建此数组;(我必须在这里“猜测”,你的问题不是很清楚那些“Burberry”和“Butchery”词来自哪里)

例如,有人想在您的数据库中搜索名称包含“Burberry”或“Butchery”的“Shifts”。您从表单字段中收集搜索查询并使用这些词创建一个“或”查询;

// Search-term entered by the user
// for example, obtained via $search = $this->request->query['search'];
$search      = 'Burberry Butchery';
$keywords    = explode(' ', $search);
$conditions  = array();

foreach($keywords as $keyword) {
    $conditions[] = array(
        'Shift.name LIKE' => '%' . $keyword . '%'
    );
}

$results = $this->Shift->find('all', array(
    'conditions' => array(
        'OR' => $conditions
    ),
));
于 2013-04-22T18:49:56.750 回答
0
$skillAux=array();
$count=0;
foreach ($skillNames as $value){

    foreach($value as $finalkey => $finalvalue){
    echo $finalkey;
    $skillAux[$finalkey.$count] = $finalvalue;    
    }
    $count++;
}
var_dump($skillAux);exit();
于 2013-04-22T15:42:44.423 回答
0

如果您正在循环其中一个数组,您可以使用 array_push() 将每个值添加到另一个数组。

于 2013-04-22T15:29:19.257 回答
0

尝试这个

echo implode('<br>', $skillAux);

文档implode函数会将整个数组转换为
字符串 语法


string implode ( string $glue , array $pieces )
string implode ( array $pieces )

第一个参数 -> 要用于将数组片段连接在一起的字符串。
第二个参数 -> 数组

兼容 PHP 4、PHP 5

参考: http: //php.net/manual/en/function.implode.php

于 2013-04-22T16:30:28.843 回答