Как удалить элементы из массива с определенного значения на?

1

У меня есть массив в PHP, и я не знаю, как удалить все элементы из каждого элемента массива из определенного символа, включая этот символ. Есть ли способ сделать это?

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

В моем примере я хочу удалить весь текст из "#####", включая "#####" до конца, для элемента массива foreach. Это возможно? Или есть функция PHP для этого?

ОБНОВИТЬ

Мой результат должен выглядеть так:

array(1092) {
  ["Piper;Rosii;Sare;Test;Vinete]=>
  int(124)
}
  • 0
    Я думаю, что вы допустили небольшую ошибку при создании массива относительно значения ключа.
  • 0
    Что вы имеете в виду? Я хочу этот ключ, потому что это счет. Длинная история. Все, что мне нужно, это способ удалить из каждого элемента массива содержимое с этой точки на «######». Есть ли для этого функция PHP?
Показать ещё 4 комментария
Теги:

3 ответа

1
Лучший ответ

Вы можете использовать array_walk для применения substr и strpos к каждому элементу:

$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);

Это приведет к:

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

Это изменит исходный массив.

Для каждого элемента массива мы ищем позицию "#####" в строке и принимаем только часть от 0 до позиции в строке, где "#####" встречается.

  • 0
    То, что они хотели изменить, было ключом, а не ценностью.
1

Вы можете использовать substr и strpos для добавления новой записи, а затем unset старую запись в массиве, как в этом примере:

$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);

Это приведет к:

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

Это сделает это, перейдя через массив, взрывающий ключ, с помощью ##### и добавив его в новый массив. Я сделал это в цикле, если ваш массив больше 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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню