PHP array_slice или эквивалент в массиве массивов, которые имеют идентификатор - PullRequest
0 голосов
/ 02 мая 2019

У меня есть многомерный массив с ключом uuid's, и мне нужно нарезать / выдвигать / отменять элемент с помощью uuid (то есть, если у меня было a410463e-7fe2-4fba-8733-a812c0ee8c54 и я хотел удалить этот элемент с помощью этого uuid), чтобырезультат, по сути, тот же, за исключением одного элемента, который был удален:

array:5 [
  "5fc29794-9e08-4944-ba6d-4a5fcde5c88b" => array:3 [
    "id" => "5fc29794-9e08-4944-ba6d-4a5fcde5c88b"
    "name" => "fuga"
    "value" => 0
  ]
  "a410463e-7fe2-4fba-8733-a812c0ee8c54" => array:3 [
    "id" => "a410463e-7fe2-4fba-8733-a812c0ee8c54"
    "name" => "nihil"
    "value" => 0
  ]
  "c141d973-91fe-4227-8985-04bd0665f4a8" => array:3 [
    "id" => "c141d973-91fe-4227-8985-04bd0665f4a8"
    "name" => "eaque"
    "value" => 0
  ]
  "17030897-1aa9-487d-a4be-d574dd0c9d9b" => array:3 [
    "id" => "17030897-1aa9-487d-a4be-d574dd0c9d9b"
    "name" => "eveniet"
    "value" => 3
  ]
  "901d9f8f-573f-444f-8562-0cdf5888ba6e" => array:3 [
    "id" => "901d9f8f-573f-444f-8562-0cdf5888ba6e"
    "name" => "in"
    "value" => 6
  ]
]

Я знаю, как разделить на части по индексу, но у меня возникают проблемы с поиском ресурсов, как этого можно достичь.Это для phpunit теста.Я пытался unset, но не могу сохранить это в переменной или просто вызвать ее в утверждении:

unset($array1[$id]);
unset($array2[$id]);

Не сохраняется изменение.

$newUnchanged = unset($array1[$id]);
$oldUnchanged = unset($array2[$id]);

Выдает syntax error, unexpected 'unset' ошибка.В конечном итоге я хочу сказать, что все неизмененные элементы остались такими же, как и до обновления одного элемента.Я также попробовал этот уродливый бизнес, который удаляет один элемент, но не правильный:

$keyOne = array_search($id, array_keys($array1), true);
$oldUnchanged = array_slice($array1, $keyOne, null, true);

$keyTwo = array_search($id, array_keys($array2), true);
$newUnchanged = array_slice($array2, $keyTwo, null, true);

// Shows that the item that I wanted to slice still exists in both arrays
dd($id, $oldUnchanged, $newUnchanged);

// ^ Causes this test to fail
$this->assertEquals($oldUnchanged, $newUnchaged);

1 Ответ

0 голосов
/ 02 мая 2019

Я понял, что мне нужно клонировать массивы, прежде чем я смогу их сбросить

$oldUnchanged = $array1;
unset($oldUnchanged[$id]);

$newUnchanged = $array2;
unset($newUnchanged[$id]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...