首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一个+ cakephp条件中合并或合并两个数组

在一个+ cakephp条件中合并或合并两个数组
EN

Stack Overflow用户
提问于 2013-04-22 23:26:41
回答 3查看 1.2K关注 0票数 0

如何打印此数组:

代码语言:javascript
运行
复制
array
      0 => 
        array
          'Shift.name LIKE' => string '%Burberry%' (length=10)
      1 => 
        array
          'Shift.name LIKE' => string '%Butchery%' (length=10)

如下所示:

代码语言:javascript
运行
复制
array 
  'Shift.name LIKE' => string '%Burberry%' (length=10)  
  'Shift.name LIKE' => string '%Butchery%' (length=10)

到目前为止,我写的是:

代码语言:javascript
运行
复制
$skillAux =array(); $i=0;
foreach ($skillNames as $name){
                    $skillAux[$i] = array('Shift.name LIKE'=>'%'.$name.'%');
                    $i++;                
                }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-23 02:49:57

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

首先,一个(关联的)中的‘key’应该是唯一的,所以要努力做到这一点;

代码语言:javascript
运行
复制
array (
  'Shift.name LIKE' => '%Burberry%'  
  'Shift.name LIKE' => '%Butchery%'
)

与尝试这样做是一样的;

代码语言:javascript
运行
复制
$myArray = array();

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

换句话说,你正在重写'Shift.name LIKE‘键的前一个值,所以你最终只会得到最后一个值;

代码语言:javascript
运行
复制
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”条件时,您可以这样做;

代码语言:javascript
运行
复制
$results = $this->Shift->find('all', array(
    'conditions' => array(
        'OR' => array(
            'Shift.name LIKE' => '%Burberry%',
            'Shift.something' => 'something',
        ),
    ),
));

这将执行类似这样的操作;

代码语言:javascript
运行
复制
SELECT * 
FROM shifts AS Shift
WHERE Shift.name LIKE '%Burberry%' OR Shift.something = 'something';

但是,如果您需要对相同的字段执行此操作,则此将无法工作(正如我在答案的第一部分中所解释的)。

为CakePHP中的单个字段创建“OR”条件

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

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

像这样;

代码语言:javascript
运行
复制
array(
    'OR' => array(
        array('Shift.name LIKE' => '%Burberry%'),
        array('Shift.name LIKE' => '%Butchery%'),
    )
)

它可以像这样使用;

代码语言:javascript
运行
复制
$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
    ),
));

这将执行类似这样的操作;

代码语言:javascript
运行
复制
SELECT * 
FROM shifts AS Shift
WHERE Shift.name LIKE '%Burberry%' OR Shift.name LIKE '%Butchery%';

示例

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

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

代码语言:javascript
运行
复制
// 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
    ),
));
票数 3
EN

Stack Overflow用户

发布于 2013-04-22 23:29:19

如果要遍历其中一个数组,可以使用array_push()将每个值添加到另一个数组中。

票数 0
EN

Stack Overflow用户

发布于 2013-04-22 23:42:44

代码语言:javascript
运行
复制
$skillAux=array();
$count=0;
foreach ($skillNames as $value){

    foreach($value as $finalkey => $finalvalue){
    echo $finalkey;
    $skillAux[$finalkey.$count] = $finalvalue;    
    }
    $count++;
}
var_dump($skillAux);exit();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16150839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档