我想删除由特定值选择的数组中的整个数组。 这是我到目前为止的代码。
由于我使用所有子数组取消了数组,然后插回子数组,这可能(我认为)导致更大或更多数组的巨大性能问题。
所以我的问题是有一种方法可以优化下面的代码,或者只删除一个数组并保持其他数据不变?
谢谢:)
<?php
$currentValue = '#6';
$otherValue = [ "ID" => '2', "valueID" => '#6' ];
$otherValue2 = [ "ID" => '3', "valueID" => '#7' ];
$otherValue3 = [ "ID" => '4', "valueID" => '#8' ];
$valueArray = [ $otherValue, $otherValue2, $otherValue3 ];
echo 'current value: '.$currentValue;
echo '<br><br>';
print_r($valueArray);
echo '<br><br>';
foreach( $valueArray as $key => $value ) {
echo 'Value: ';
print_r($value);
if(($key = array_search($currentValue, $value)) !== false) {
echo ' - true, '.$currentValue.' is in $value<br>';
unset($value);
unset($valueArray);
if( isset($value) ) {
print_r($value);
echo '<br>';
} else {
echo '$value was deleted<br><br>';
}
} else {
echo ' - false<br>';
$valueArray[] = $value;
}
}
echo '<br>';
print_r($valueArray);
?>
答案 0 :(得分:1)
在许多情况下,您的代码将返回错误的结果,例如,根本找不到搜索的值或最后一个子数组。这是因为以下几行:
unset($valueArray);
和
$valueArray[] = $value;
第一个声明破坏了之前的第二个结果。或者,如果第一个从未执行,则第二个只是添加到原始数组,使其成为原始大小的两倍。
相反,您可以使用array_filter
:
$valueArray = array_filter($valueArray, function ($value) use ($currentValue) {
return array_search($currentValue, $value) === false;
});
在eval.in上看到它。
正如@shudder在评论中指出的那样,你想要搜索所有键中的值是很奇怪的。从您给出的示例看起来您希望在valueID
键下找到它。
在这种情况下,您可以优化代码并执行:
$valueArray = array_filter($valueArray, function ($value) use ($currentValue) {
return $value['valueID'] !== $currentValue;
});
在eval.in上看到它。