如何打印此数组:
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++;
}发布于 2013-04-23 02:49:57
数组键(索引)必须是唯一的
首先,一个(关联的)中的‘key’应该是唯一的,所以要努力做到这一点;
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中的不同字段创建“OR”条件
您可能会感到困惑,因为当为不同的字段创建“OR”条件时,您可以这样做;
$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中的单个字段创建“OR”条件
正如您的一条评论中所提到的,您正在尝试为CakePHP中的单个字段创建一个“OR”条件。
基本上,您需要做的是创建多个关联数组,并将它们包装在一个非关联数组中(实际上,这就是您在第一个示例中得到的)
像这样;
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”的“班次”。从表单字段中收集搜索查询,并使用这些单词创建一个“OR”查询;
// 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-22 23:29:19
如果要遍历其中一个数组,可以使用array_push()将每个值添加到另一个数组中。
发布于 2013-04-22 23:42:44
$skillAux=array();
$count=0;
foreach ($skillNames as $value){
foreach($value as $finalkey => $finalvalue){
echo $finalkey;
$skillAux[$finalkey.$count] = $finalvalue;
}
$count++;
}
var_dump($skillAux);exit();https://stackoverflow.com/questions/16150839
复制相似问题