如何打印这个数组:
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++;
}
数组键(索引)必须唯一
首先,(关联)中的'键'应该是唯一的,所以尝试实现这一点;
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中为单个字段创建一个"或"条件。
基本上,你需要做的是创建多个关联数组并将它们包装在一个非关联数组中(实际上,这就是你在第一个例子中得到的)
这样的;
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'和' butcher '的词是从哪里来的)
例如,有人想在你的数据库中搜索名字包含"Burberry"或"butcher"的"shift"。您从一个表单字段收集搜索查询,并使用这些单词创建一个'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
),
));
如果循环遍历其中一个数组,可以使用array_push()将每个值添加到另一个数组。
$skillAux=array();
$count=0;
foreach ($skillNames as $value){
foreach($value as $finalkey => $finalvalue){
echo $finalkey;
$skillAux[$finalkey.$count] = $finalvalue;
}
$count++;
}
var_dump($skillAux);exit();
试试这个
echo implode('<br>', $skillAux);
文档
implode函数将整个数组转换为字符串
语法
string implode ( string $glue , array $pieces )
string implode ( array $pieces )
第一个参数->用于将数组片段连接在一起的字符串。
第二个参数-> array
兼容PHP 4, PHP 5
参考:http://php.net/manual/en/function.implode.php