English 中文(简体)
How can I remove a single array member using array_splice in php?
原标题:

I think I may not understand correctly how array_splice is supposed to work. My understanding is that the first param is your initial array, the second param is the element to start at, and the third param is the length, or number of elements to remove/replace.

So, I have this array (print_r output):

Array ( 
[0] => Array ( [TypeFlag] => S [qty] => 1 [denom] => 25 [certMessage] => [totalPrice] => 25 ) 
[1] => Array ( [TypeFlag] => C [qty] => 2 [denom] => 25 [certMessage] => [totalPrice] => 50 ) 
[2] => Array ( [TypeFlag] => V [qty] => 2 [denom] => 25 [certMessage] => test [totalPrice] => 50 ) )

I want to completely remove the second element (the array with index of 1; TypeFlag = C, etc.) I do not want to replace it with anything; just to return the array with the remaining two elements. I ve tried this (where cart is the array name):

$cart = array_splice($cart, 1,1);

But what I end up with is this when doing a print_r:

Array ( [0] => Array ( [TypeFlag] => C [qty] => 2 [denom] => 25 [certMessage] => [totalPrice] => 50 ) ) 

So it appears to be removing 0 and 2, and leaving 1 as the remainder. What am I doing wrong?

最佳回答

array_splice returns an array consisting of the extracted elements.

You are doing:

$cart = array_splice($cart, 1,1);

So you are extracting 2nd element (index 1) and are assigning the result back to $cart, overwriting your original array.

To completely remove the 2nd element do not assign the return value of array_splice back to $cart. So just do:

array_splice($cart, 1,1);

This works because the array is passed by reference to the function.

Also if you want to remove a single element from the array its more efficient and cleaner to use unset as:

unset($cart[1]);
问题回答

array_splice returns the "removed/replaced" elements, which you re then assigning to overwrite the correctly spliced $cart

$discard = array_splice($cart, 1,1);

or simply

array_splice($cart, 1,1);

Why dont you use unset- i.e.

unset(nameofyourarray[indextoremove]);

http://php.net/manual/en/function.unset.php

The only issue with using unset() is that it doesn t update the indexes.

i.e.

$arr = array( one ,  two ,  three ,  four );
print_r($arr);

Array ( [0] => one [1] => two [2] => three [3] => four )

unset($arr[2]);

print_r($arr);

Array ( [0] => one [1] => two [3] => four )

whereas array_splice will re-index the array

$arr = array( one ,  two ,  three ,  four );
array_splice($arr,2,1);
print_r($arr);

Array ( [0] => one [1] => two [2] => four )

Just use unset():

unset($cart[1]);




相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

热门标签