使用implode()从另一个数组创建一个数组

时间:2014-01-26 06:51:37

标签: php arrays

我有一个数组。

我的阵列:

while($rowop = mysql_fetch_array($resultop))
{
    $info[] = array(
        'status'=>$rowop[2],
        'day' => $rowop[3],
        'from'=>$rowop[4],
        'to' => $rowop[5],
        'mon'=>$rowop[6],
        'tue' => $rowop[7],
        'wed'=>$rowop[8],
        'thu' => $rowop[9],
        'fri'=>$rowop[10],
        'sat' => $rowop[11],
        'sun'=>$rowop[12]
    );
}

$rowop[6],$rowop[7],$rowop[8],$rowop[9],$rowop[10],$rowop[11],$rowop[12]的值可以是'on''off'。我想只显示那些包含'off'值的行。数组将与:

相同
'status'=>'ok',
'day' =>'all',
'from'=>'12pm',
'to' => '8am',
'off day'=>'tue,wed,thu,sat,sun'

任何人请给我Idea.if可能举例

5 个答案:

答案 0 :(得分:0)

这个怎么样?

$days = ['mon','tue','wed','thu','fri','sat','sun'];
for($offs=[],$i=6,$i<=12,$i++) if($rowtop[$i]=='off') $offs[]= $days[$i-6];

$info[] = array(
     'status'=>$rowop[2],
     'day' => $rowop[3],
     'from'=>$rowop[4],
     'to' => $rowop[5],
     'off day' => implode(',', $offs)
);

答案 1 :(得分:0)

如何关注代码

我没有测试过。如果有任何错误,请修复

$days = array('mon','tue', 'wed', 'thu', 'fri', 'sat', 'sun');
$selected = array();
$final = array();
foreach($days as $day)
{
    if(isset($info[$day]))
        if($info[$day] == 'off')
            $selected[] = $info[$day];
}

$all_days = implode(',', $selected);
$final['status'] = $info['status'];
$final['day'] = $info['day'];
$final['from'] = $info['from'];
$final['to'] = $info['to'];
$final['off day'] = $all_days;

答案 2 :(得分:0)

试试这个,(假设您的数组名称为$info):

$result = array();
foreach($info as $key=>$value){
    $result[$key]['status'] = $value['status'];
    $result[$key]['day'] = $value['day'];
    $result[$key]['from'] = $value['from'];
    $result[$key]['to'] = $value['to'];
    $off=array();
    foreach ($value as $k => $v) {
        if($v=="off") $off[]=$k;
    }
    if($off) $off_days = implode (", ", $off);
    $result[$key]["off day"] = $off_days;
}
print_r($result);

答案 3 :(得分:0)

使用array_filter

的示例
$days = array('mon','tue', 'wed', 'thu', 'fri', 'sat', 'sun');

while($rowp ....) { //

$offs = implode (
            ',',
            array_keys(
                array_filter(
                    array_intersect_key($oneRow, array_flip($days)),
                    function($i) {return $i == 'off'}
                )
            )
);

//...

}

其中$oneRow是您填写$info array with.

的内容

希望有所帮助

答案 4 :(得分:0)

这可以通过多个步骤实现:

  • 使用array_filter()查找状态为off的所有密钥,并将其存储在数组$result
  • 使用array_diff_key()
  • 删除所有“周密钥”,即montuewed等。
  • Implode $result数组以获取逗号分隔的字符串,并使用它来创建新的数组元素

代码:

// find all keys with 'off' status
$status = 'off';
$result = array_keys(array_filter($info,
    function($element) use ($status) {
        return $element == $status;
    }
));

// remove all week keys
$keys = array('mon','tue','wed','thu','fri','sat','sun');
$info = array_diff_key($info, array_flip($keys));

// create a new array item with the comma-separated key string
$info['off_days'] = implode(',', $result);

print_r($info);

输出:

Array
(
    [status] => ok
    [day] => all
    [from] => 12pm
    [to] => 8am
    [off_days] => tue,wed,thu,sat,sun
)

Demo.

相关问题