【发布时间】:2019-09-21 06:26:13
【问题描述】:
我有一个以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);
【问题讨论】:
-
所以你只是想根据它的键删除一个项目?
-
是的。但关键是 id 而不是索引。
-
好的。我现在有点困惑,因为您示例中的键与 ID 相同。你能解释一下为什么像
unset()这样的东西不起作用吗?另外,你能提供你目前拥有的代码吗? -
您要删除哪些项目?您可以将数组包含为 var_export 吗?
-
我从 unset 开始,但我得到了
syntax error, unexpected 'unset'。我正在尝试删除我拥有该 ID 的任何项目。用例是我只更新其中一项,然后尝试测试所有其他项是否未更改。上面的数组是从 jsonb postgres 列中转换而来的。
标签: php laravel phpunit php-7 php-7.1