如何简化此代码?

时间:2014-02-11 15:31:53

标签: php

我只是想知道是否有办法简化这段代码?

 foreach ($parent_data as $ind_port_record) {
     if (   isset($ind_port_record['port_name'])  && (strtoupper($ind_port_record['port_name']) == 'GI/2' || strtoupper($ind_port_record['port_name']) == 'G2' || strtoupper($ind_port_record['port_name']) == 'GI2') ){
            $record_to_include['remote_id'] = $ind_port_record['remote_id'];
            $record_to_include['remote_name'] = $ind_port_record['remote_name'];
            $record_to_include['remote_object_id'] = $ind_port_record['remote_object_id'];
            $record_to_include['remote_object_name'] = $ind_port_record['remote_object_name'];
            break;
        }
  }

//make sure you have something in remote object details
if ( ! isset($record_to_include['remote_id']) ){
    $record_to_include['remote_id'] = '';
    $record_to_include['remote_name'] = '';
    $record_to_include['remote_object_id'] = '';
    $record_to_include['remote_object_name'] = '';                          
}

我只需要确保$ record _to_include中的值不是未初始化的或NULL。

感谢。

4 个答案:

答案 0 :(得分:2)

首先,简化if()

您目前有很多条件

(strtoupper($ind_port_record['port_name']) == 'GI/2' || strtoupper($ind_port_record['port_name']) == 'G2' || strtoupper($ind_port_record['port_name']) == 'GI2')

让我们检查一个数组

in_array( strtoupper($ind_port_record['port_name'], array('GI/2','G2','GI2')) )

现在检查$record_to_include是否未初始化或NULL

让我们遍历数组并进行简单的检查。

foreach($record_to_include as $record => $value) {
    $record_to_include[$record] = is_null($value) OR !isset($record_to_include[$record]) ? '' : $value;
}

答案 1 :(得分:1)

$record = array_filter($parentData, function (array $record) {
    return isset($record['port_name']) && preg_match('!^(GI/2|G2|GI2)$!i', $record['port_name']);
});

$recordToInclude = $record ? current($record) : array(
    'remote_id'          => null,
    'remote_name'        => null,
    'remote_object_id'   => null,
    'remote_object_name' => null
);

答案 2 :(得分:1)

$gi_constraint = array('GI/2', 'G2', 'GI2'); // you are checking one and the same variable for different values, so you can use in_array here
 foreach ($parent_data as $ind_port_record) {
     if (isset($ind_port_record['port_name'])  && in_array(strtoupper($ind_port_record['port_name']), $gi_constraint)){
         foreach ($ind_port_record as $k=>$v) {
            $record_to_include[$k] = $v; // as they have the same keys, you can specify the key and assign to the value of $in_port_record
         }
         break;
    }
}

//make sure you have something in remote object details
if (!isset($record_to_include['remote_id']) ){
    foreach ($record_to_include as $k => &$v) {
        $v = ''; // when using reference, it will change the original array
    }                         
}

代码中的解释

答案 3 :(得分:0)

尝试

$arr = array('remote_id','remote_name','remote_object_id','remote_object_name');

if (   isset($ind_port_record['port_name'])  && (strtoupper($ind_port_record['port_name']) == 'GI/2' || strtoupper($ind_port_record['port_name']) == 'G2' || strtoupper($ind_port_record['port_name']) == 'GI2') ){
  foreach($arr as $ar){
    $record_to_include[$ar] = (isset($ind_port_record[$ar]) && isset($record_to_include['remote_id']))?$ind_port_record[$ar]:NULL;
  }
}