阵列过滤和修剪后更改索引

时间:2017-04-28 08:49:37

标签: php arrays codeigniter

我需要在数组过滤和修剪空格后更改数组的索引。

 $officials_arr= $this->input->post('officials'); 
  $officials = array_filter(array_map('trim', $officials_arr));
  print_r($officials); 

期望的输出:

(
    [0] => off1
    [1] => off2
    [2] => off3
)

但我的输出为:

Array
(
    [0] => off1
    [1] => off2
    [3] => off3
)

2 个答案:

答案 0 :(得分:3)

使用<bean id="velocityEngine"class="org.springframework.ui.velocity.VelocityEngineFactoryBean"> <property name="velocityProperties"> <map> <entry key="resource.loader" value="ds"/> <!--<entry key="ds.resource.loader.class" value="org.apache.velocity.runtime.resource.loader.DataSourceResourceLoader"/>--><!--should be left out--> <entry key="ds.resource.loader.resource.table" value="templates" /> <entry key="ds.resource.loader.resource.keycolumn" value="tid" /> <entry key="ds.resource.loader.resource.templatecolumn" value="template" /> <entry key="ds.resource.loader.resource.timestampcolumn" value="updated" /> <entry key="ds.resource.loader.instance" value-ref="dataSourceLoader" /> <entry key="ds.resource.loader.cache" value="true" /> </map> </property> ,请参阅here

array_values

答案 1 :(得分:1)

而不是使用:$officials=array_values(array_filter(array_map('trim',$officials_arr)));(...顺便说一句,它将从数组中删除所有null,false-y,zero-ish值 - 这是array_filter()的贪婪默认行为)我建议您在单行中仅使用array_walk()strlen()以更可靠,更有效的方式生成所需的输出。我的方法将删除零长度字符串(null / false / empty),从每个值的两边修剪空格,并重新索引结果数组。

输入(通知,注意我已添加空格和空值):

$officials_arr=[' off1' , 'off2' , '' , 'off3 ' , null];
           space ^      empty string^   space^    ^null

方法:

array_walk($officials_arr,function($v)use(&$officials){if(strlen($v)){$officials[]=trim($v);}});
var_export($officials);

输出:

array ( 0 => 'off1', 1 => 'off2', 2 => 'off3', )

故障:

array_walk(                        // iterate each element in the input array
    $officials_arr,                // input array
    function($v)                   // temporary variable name for each element
    use(&$officials){              // declare the output array, & means "modifiable"
        if(strlen($v)){            // check if element value has any characters
            $officials[]=trim($v); // push qualifying value into output array
        }
    }
);