按值从PHP数组中删除PHP数组

时间:2016-06-25 16:34:34

标签: php arrays multidimensional-array

我想删除由特定值选择的数组中的整个数组。 这是我到目前为止的代码。

由于我使用所有子数组取消了数组,然后插回子数组,这可能(我认为)导致更大或更多数组的巨大性能问题。

所以我的问题是有一种方法可以优化下面的代码,或者只删除一个数组并保持其他数据不变?

谢谢:)

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

?>

1 个答案:

答案 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上看到它。