Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中删除关联数组中间元素的最佳方法是什么?_Php - Fatal编程技术网

在PHP中删除关联数组中间元素的最佳方法是什么?

在PHP中删除关联数组中间元素的最佳方法是什么?,php,Php,请告诉我在PHP中取消设置关联数组中间元素的最佳方法是什么 假设我有一个10000个元素的数组,我想删除该数组的中间元素,哪种方法是删除中间元素的有效方法 $temp = array('name1'=>'value1','name2'=>'value2',...,'name10000'=>'value10000'); $middleElem = ceil(count($temp) / 2); $i = 0; foreach ($temp as $key=>$val) { if ($i == $

请告诉我在PHP中取消设置关联数组中间元素的最佳方法是什么

假设我有一个10000个元素的数组,我想删除该数组的中间元素,哪种方法是删除中间元素的有效方法

$temp = array('name1'=>'value1','name2'=>'value2',...,'name10000'=>'value10000'); $middleElem = ceil(count($temp) / 2); $i = 0; foreach ($temp as $key=>$val) { if ($i == $middleElem) { unset($temp[$key]); break; } $i++; }
上面的代码有效吗?

您可以找到数组的大小,将该数字除以2,然后继续删除元素。不确定性能的问题在于,尽管可以找到数组的大小,将该数字除以2,然后继续删除元素。虽然未设置$myArray[key],但性能不确定是有问题的 由于数组是关联的,因此可以通过这种方式轻松删除任何元素

unset$myArray[key]
$temp = Array("name1"=>"value1","name2"=>"value2",...,"name10000"=>"value10000");
$middleElem = ceil(count($temp)/2);
$keys = array_keys($temp);
$middleKey = $keys[$middleElem];
unset($temp[$middleKey]);
由于数组是关联的,因此可以通过这种方式轻松删除任何元素

$temp = Array("name1"=>"value1","name2"=>"value2",...,"name10000"=>"value10000");
$middleElem = ceil(count($temp)/2);
$keys = array_keys($temp);
$middleKey = $keys[$middleElem];
unset($temp[$middleKey]);
那里^_^


首先,在这一点上,我不会太担心什么是最有效的方法。您最好还是编写代码,因为代码易于阅读、调试和更改。像这样的微观优化很少能产生好的结果,因为它们通常不是最大的瓶颈

话虽如此,如果您想要一个易于阅读的解决方案,那么如何使用


首先,在这一点上,我不会太担心什么是最有效的方法。您最好还是编写代码,因为代码易于阅读、调试和更改。像这样的微观优化很少能产生好的结果,因为它们通常不是最大的瓶颈

话虽如此,如果您想要一个易于阅读的解决方案,那么如何使用


我认为这是一个正确的方法。试试这个:

array_remove_at( $temp, ceil(count($temp) / 2) - 1);
function array_remove_at(&$array, $index){
    if (array_key_exists($index, $array)) {
        array_splice($array, $index, 1);
    }
}

我认为这是一个正确的方法。试试这个:

array_remove_at( $temp, ceil(count($temp) / 2) - 1);
function array_remove_at(&$array, $index){
    if (array_key_exists($index, $array)) {
        array_splice($array, $index, 1);
    }
}

我认为下面的代码更有效,因为您不必在循环中执行它。我通常遵循与Kolink相同的模式,但我的版本检查是否确实存在中间元素。我认为它适用于所有类型的阵列

<?php

for( $i = 0; $i <= 9; $i ++ ) {
    $temp['name'.$i] = 'value'.$i;
}

if( ( $count = count( $temp ) ) % 2 === 0 ) {
    /** Only on uneven arrays. */
    array_splice( $temp, ( ceil( $count ) / 2 ), 1 );
}

var_dump( $temp );

编辑:Thavarith似乎是对的;数组拼接比简单地取消设置值快得多。另外,您还可以获得不必使用数组键的额外好处,因为您现在已经达到了$offset的中间值。

我认为下面的代码更有效,因为您不必在循环中执行它。我通常遵循与Kolink相同的模式,但我的版本检查是否确实存在中间元素。我认为它适用于所有类型的阵列

<?php

for( $i = 0; $i <= 9; $i ++ ) {
    $temp['name'.$i] = 'value'.$i;
}

if( ( $count = count( $temp ) ) % 2 === 0 ) {
    /** Only on uneven arrays. */
    array_splice( $temp, ( ceil( $count ) / 2 ), 1 );
}

var_dump( $temp );
编辑:Thavarith似乎是对的;数组拼接比简单地取消设置值快得多。另外,您还可以获得不必使用array_键的额外好处,因为您现在已经知道中间的$offset是多少。

考虑到$array是您的数组,如果中间元素的元素数为奇数,则此代码将删除它。如果事件发生,它将删除中间两个元素中的第一个

测试结果:

你必须弄清楚当你有一个偶数个元素的数组时你想做什么。那么你想要什么元素呢

上面的代码选取“较低”的元素,可以轻松编辑代码,使其选取“较高”的元素。你唯一需要检查的是其他所有答案都没有做的事情如果你有三个元素会发生什么。它没有;不要选择中间的元素,而是最后一个。因此,您必须添加一个检查。

考虑到$array是您的数组,如果中间元素的元素数为奇数,则此代码将删除该元素。如果事件发生,它将删除中间两个元素中的第一个

测试结果:

你必须弄清楚当你有一个偶数个元素的数组时你想做什么。那么你想要什么元素呢


上面的代码选取“较低”的元素,可以轻松编辑代码,使其选取“较高”的元素。你唯一需要检查的是其他所有答案都没有做的事情如果你有三个元素会发生什么。它没有;不要选择中间的元素,而是最后一个。因此,您必须添加一个检查。

偶数数组没有“中间元素”。考虑一个具有4个元素的数组。有元素1,2,3和4;哪一个是中间元素?偶数数组没有“中间元素”。考虑一个具有4个元素的数组。有元素1,2,3和4;哪一个是中间元素?不?不正确。。。以一个包含三项的数组为例。你认为哪一项会让你不安?我在修改OP的代码,让它做他们想做的事。我没有花时间解决所有的bug和故障,这是他们的工作。抱歉,如果你说的太粗鲁了…@kolinkwtf。我在修改OP的代码,让它做他们想做的事。。如果OP有bug,它显然做不到OP想要做的事情……简言之:unset$arr[array_keys$arr[ceilcount$arr/2];但是请记住,这种语法只允许在PHP5.4中使用。xuhhhmmm否?不正确。。。以一个包含三项的数组为例。我
你觉得我们会不安吗?我在修改OP的代码,让它做他们想做的事。我没有花时间解决所有的bug和故障,这是他们的工作。抱歉,如果你说的太粗鲁了…@kolinkwtf。我在修改OP的代码,让它做他们想做的事。。如果OP有bug,它显然做不到OP想要做的事情……简言之:unset$arr[array_keys$arr[ceilcount$arr/2];但是请记住,这种语法只允许在PHP5.4.x中使用