0

i have an array that the middle part change according to quantity products

Array ( [name] => Alberto [email] => [email protected] [code_1] => tshirt [description_1] => Tshirt color red [price_1] => 453.0 [quantity_1] => 1 [subtotal_1] => 453.0 [code_2] => sweater [description_2] => Sweater with long sleeves [price_2] => 23.43 [quantity_2] => 2 [subtotal_2] => 46.86 [employee] => 1 [total] => 499.86 )

And i want to remove the first 2 elements and the last 2 elements, just leave

Array ( [code_1] => tshirt [description_1] => Tshirt color red [price_1] => 453.0 [quantity_1] => 1 [subtotal_1] => 453.0 [code_2] => sweater [description_2] => Sweater with long sleeves [price_2] => 23.43 [quantity_2] => 2 [subtotal_2] => 46.86 )

I try with

array_splice($_POST, 2, -2);

but this just keep the first 2 and last 2, I need the elements between them.

Thanks for your help :)

2
  • 1
    When you say remove do you need the data or no? You could simply unset($array['name']); and the others if you do not need them Commented Jan 24, 2017 at 18:46
  • 3
    $result = array_slice($_POST, 2, count($_POST)-4); maybe. Commented Jan 24, 2017 at 18:46

2 Answers 2

1

Slice using array_slice() from the 3rd item (offset 2) to the end minus the last 2:

$result = array_slice($_POST, 2, -2);

Note: If your array is 4 items or less obviously, you won't get anything.

To do it with array_splice(), remove the first 2 and then the last 2:

array_splice($_POST, 0, 2);
array_splice($_POST, -2);

Since this is an associative array it may be better to get only the keys that you want regardless of order:

$wanted = array('price_1', 'quantity_1'); // etc...
$result = array_intersect_key($_POST, array_flip($wanted));
Sign up to request clarification or add additional context in comments.

5 Comments

Actually this works great, thanks a lot AbraCadaver :)
You can just provide -2 for the length argument of array_slice to count backwards from the end instead of length-4.
Since i know the part that sorrund the products also this method works: unset($_POST['name']); unset($_POST['email']); unset($_POST['employee']); unset($_POST['total']);
Added an alternative since you should know what keys you want.
array_slice function may surprise you if you use arbitrary numeric values for keys, i.e. – no excuses and benefits from using error prone function like array_slice.
0

Since your data structure is a HASH MAP you SHOULD NOT remove the elements with numeric indexes (key position).

It is a HASH MAP and you MUST NOT relay on indexes (key position), RELAY only on keys.

Remove any element from an array (hash map) using unset instruction.

unset($arr['name'], $arr('email'));

2 Comments

There are array_slice and array_splice functions that allow for removing elements from an array by numeric index regardless of keys.
I added probably a better way, since I hope OP knows which keys they want.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.