首页 > 编程技术 > php

php 删除指定数组元素方法

发布时间:2016-11-25 16:48

下面提供两款高效的经典的删除数组元素的方法,我们可以指定删除那个就删除,有需要的同学可以参考一下,这里来自php.net哦。
 代码如下 复制代码


<?php
function deleteFromArray(&$array, $deleteIt, $useOldKeys = FALSE)
{
    $key = array_search($deleteIt,$array,TRUE);
    if($key === FALSE)
        return FALSE;
    unset($array[$key]);
    if(!$useOldKeys)
        $array = array_values($array);
    return TRUE;
}
?>

方法二

 代码如下 复制代码

<?php
function deleteFromArray(&$array, $deleteIt, $useOldKeys = FALSE)
{
    $tmpArray = array();
    $found = FALSE;
    foreach($array as $key => $value)
    {
        if($value !== $deleteIt)
        {
            if(FALSE === $useOldKeys)
            {
                $tmpArray[] = $value;
            }
            else
            {
                $tmpArray[$key] = $value;
            }
        }
        else
        {
            $found = TRUE;
        }
    }
  
    $array = $tmpArray;
  
    return $found;
}
?>

分享一篇关于linux中fgetcsv取得的数组元素为空字符串的解决方法的教程,有需要的朋友可以参考一下下哈。

使用CSV导入数据的时候,我们通常用的是Windows系统,使用GBK在Windows的Excel中编辑.

但服务器上,很多使用Linux服务器,源程序使用UTF-8,这样很容易产生字符编码的问题.

如果仅仅将CSV文件转码为UTF-8,这样在Windows服务器上没有问题,

而在RedHat5.5上,用fgetcsv取得的数组中,如果某列的内容是中文,则该列对应的数组元素为空字符串,而英文则正常.

这时,需要设置区域: 

 代码如下 复制代码

setlocale(LC_ALL, 'zh_CN.UTF-8');
代码如下


// 上传的CSV文件,通常是用Excel编辑的GBK编码,
// 而源代码是UTF-8,需要进行转码处理
file_put_contents($new_file, iconv('GBK', 'UTF-8', file_get_contents($new_file)));

//ini_set('auto_detect_line_endings', true);
// 设置区域:简体中文,UTF-8编码
setlocale(LC_ALL, 'zh_CN.UTF-8');
// 打开CSV文件
$handle = fopen($new_file, 'r');
// 取出列头
$data_heads = fgetcsv($handle);

在未知道这个函数前我们要在数据前面插入一些元素觉得很复杂,要利用遍历来操作,要不就插入到后面了,下面我们分享一个实用的array_unshift()函数,它可以解决一切问题。

先不说什么先看实例

#1 array_unshift() example

 代码如下 复制代码

<?php
$queue = array("orange", "banana");//定义数组
array_unshift($queue, "apple", "raspberry");//向数组插入元素
print_r($queue);
?>


输出结果

 代码如下 复制代码

Array
(
    [0] => apple
    [1] => raspberry
    [2] => orange
    [3] => banana
)


非常的简单,那我们看看array_unshift()说明.


array_unshift() 函数在数组开头插入一个或多个元素。

被加上的元素作为一个整体添加,这些元素在数组中的顺序和在参数中的顺序一样。

该函数会返回数组中元素的个数。

 

 代码如下 复制代码
array_unshift(array,value1,value2,value3...)

非常简单实例的一个函数吧。

关于php array_splice的用法以前有讲过了,今天主要是详细的讲一下这个函数在应用中的一些详细的具体的情况,有需要的朋友可以参考一下。

array_splice定义和用法
说明
array array_splice ( array &$input , int $offset [, int $length [, array $ replacement ]] )
array_splice() 把 input 数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement 参数,则用 replacement 数组中的单元取代。返回一个包含有被移除单元的数组。注意 input 中的数字键名不被保留。

如果 offset 为正,则从 input 数组中该值指定的偏移量开始移除。如果 offset 为负,则从 input 末尾倒数该值指定的偏移量开始移除。

如果省略 length,则移除数组中从 offset 到结尾的所有部分。如果指定了 length 并且为正值,则移除这么多单元。如果指定了 length 并且为负值,则移除从 offset 到数组末尾倒数 length 为止中间所有的单元。小窍门:当给出了 replacement 时要移除从 offset 到数组末尾所有单元时,用 count($input) 作为 length。

如果给出了 replacement 数组,则被移除的单元被此数组中的单元替代。如果 offset 和 length 的组合结果是不会移除任何值,则 replacement 数组中的单元将被插入到 offset 指定的位置。注意替换数组中的键名不保留。如果用来替换的值只是一个单元,那么不需要给它加上 array(),除非该单元本身就是一个数组。

以下表达式以同样方式修改了 $input: array_splice() 等价表达式 array_push($input, $x, $y)  array_splice($input,

 代码如下 复制代码
count($input), 0, array($x, $y)) 
array_pop($input)  array_splice($input, -1) 
array_shift($input)  array_splice($input, 0, 1) 
array_unshift($input, $x, $y)  array_splice($input, 0, 0, array($x, $y)) 
$input[$x] = $y // 对于键名和偏移量等值的数组  array_splice($input, $x, 1, $y) 


返回一个包含被移除单元的数组。

 

例子 1

 代码如下 复制代码
<?php
$a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
$a2=array(0=>"Tiger",1=>"Lion");
array_splice($a1,0,2,$a2);
print_r($a1);
?>

输出:

Array ( [0] => Tiger [1] => Lion [2] => Horse [3] => Bird )例子 2
与例子 1 相同,但是输出返回的数组:

 代码如下 复制代码
<?php
$a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
$a2=array(0=>"Tiger",1=>"Lion");
print_r(array_splice($a1,0,2,$a2));
?>

输出:

Array ( [0] => Dog [1] => Cat )例子 3
length 参数设置为 0:

 代码如下 复制代码
<?php
$a1=array(0=>"Dog",1=>"Cat");
$a2=array(0=>"Tiger",1=>"Lion");
array_splice($a1,1,0,$a2);
print_r($a1);
?>

输出:

Array ( [0] => Dog [1] => Tiger [2] => Lion [3] => Cat )


应用实例

 代码如下 复制代码

$input1 = array("red", "green", "blue", "yellow");
$input2 = array_splice($input1, 2);

//打印剩下的
print_r($input1);

//打印被移走的
print_r($input2);

因为这个函数的第一个参数是地址引用,返回值是被移走的部份。如果你只是想看剩下的。这样写 就可以了。

 代码如下 复制代码
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
print_r($input);

===================================================
我把手册的例子加了一个说明。。
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
//从第2个之后开始选,到剩下的全部,选中的移走。
//也就是 "blue", "yellow" 被选中
// $input is now array("red", "green")

array_splice($input, 1, -1);
//从第1个之后开始选,到剩下的全部倒回来一个,选中的移走。
//也就是 "green", "blue",被选中
// $input is now array("red", "yellow")

array_splice($input, 1, count($input), "orange");
//从第1个之后开始选,到剩下的全部,选中的移走,在当前指针位置加一个新值。
//也就是 "green", "blue", "yellow" 被选中
// $input is now array("red", "orange")

array_splice($input, -1, 1, array("black", "maroon"));
//从最后1个之前开始选,往下选1个,选中的移走,在当前指针位置加进一个数组。
//也就是 "yellow" 被选中
// $input is now array("red", "green","blue", "black", "maroon")

array_splice($input, 3, 0, "purple");
//从第3个之后开始选,一个都不选,在当前指针位置插入新值。
//位置就在 "red", "green", "blue" 和 "yellow" 之间
// $input is now array("red", "green", "blue", "purple", "yellow");

今天突然想到php中的in_array函数有个其怪的用法,下面我们来看看这个用法以,有需要的朋友简单的参考一下。

 

 代码如下 复制代码
$a=array("1,2,3","4");
 
if(in_array(1,$a)){
 
  echo "条件成立";
}

这个条件果然是成立的,按照我的思考逻辑上边的那个条件只有在参数1的值为”1,2,3“和为4的时候才成立,但是奇怪的是他居然成立了。战地随即测试了如下情况:

 代码如下 复制代码
$a=array("a,2,3","4");
 
if(in_array('a',$a)){
 
  echo "条件不成立";
 
}

这个是不成立的,在第一个测试用例下,如果把参数1写成’1’条件也是不成立的。战地得出的结论是:

在PHP中如果第一个参数为数字——不加引号的数字啊,第二个数组参数包含有以该数字开头的字符串的话不管第一个参数是否为第二个参数的完整元素,都会返回真值。也就是说,in_array函数并非每次都是按照我的思考逻辑进行整个元素匹配,还是我对数据类型认识的不够清楚呢?

与此同时,战地还发现如果你的数组的第一个元素为0的时候,也会出现问题,看如下情况

 代码如下 复制代码

$a=array(0,"m");
if(in_array('mc6',$a))
{
 echo "=====";
}

标签:[!--infotagslink--]

您可能感兴趣的文章: