Ionut Necula
Ionut Necula

Reputation: 11472

How to delete elements from array from certain value on?

I have an array in PHP and I don't know how to delete all the elements from every array element from certain character on, icluding that character. Is there a way to do this?

array(1092) {
  ["Piper;Rosii;Sare;Test;Vinete#####Piper ->Negru;Rosii ->Călite;Sare ->De masă, grunjoasă;Vinete ->Prăjite"]=>
  int(124)
}

In my example I want to delete all text from "#####", including "#####" to the end, foreach array element. Is this possible? Or is there a PHP function for this?

UPDATE

My result should look like this:

array(1092) {
  ["Piper;Rosii;Sare;Test;Vinete]=>
  int(124)
}

Upvotes: 1

Views: 78

Answers (3)

The fourth bird
The fourth bird

Reputation: 163342

You can use substr and strpos to add the new entry and then unset the old entry in the array like this example:

$array = array(
    "Piper;Rosii;Sare;Test;Vinete#####Piper ->Negru;Rosii ->Călite;Sare ->De masă, grunjoasă;Vinete ->Prăjite" => 124
);

foreach ($array as $key => $value) {
    $array[substr($key, 0, strpos($key, '#####'))] = $value;
    unset($array[$key]);
}

var_dump($array);

Will result in:

array(1) {
  ["Piper;Rosii;Sare;Test;Vinete"]=>
  int(124)
}

Upvotes: 1

stephangroen
stephangroen

Reputation: 1027

You can use array_walk to apply the substr and strpos to each element:

$array = [
    '23845637;54634;345;3453345;#####morestuff',
    '234234#####34596078345j34534534',
    '34343245dfg#####asdfsadf;23452345;sdfsdf;345345'
];

array_walk($array, function(&$value, $key) {
    $value = substr($value, 0, strpos($value, '#####'));
});

var_dump($array);

Will result in:

array(3) {
    [0]=>
    string(27) "23845637;54634;345;3453345;"
    [1]=>
    string(6) "234234"
    [2]=>
    string(11) "34343245dfg"
}

This will modify the original array.

For each element in the array, we search for the position of '#####' in the string and only take the part from 0 to the position in the string where '#####' occurs.

Upvotes: 1

Fluinc
Fluinc

Reputation: 491

This will do that by looping through the array exploding the key by ##### and adding it to a new array. I did it in a loop in case your array is bigger than 1

<?php
$oldArray = array("Piper;Rosii;Sare;Test;Vinete#####Piper ->Negru;Rosii ->Călite;Sare ->De masă, grunjoasă;Vinete ->Prăjite" => 124);
$newArray = array();

foreach ($oldArray as $key => $row) {
    $newKey = explode('#####', $key);
    $newArray[$newKey[0]] = $row;
}
var_dump($newArray);

Upvotes: 1

Related Questions