php

放电元素后挖掘数组键

我有一个数组:


$array = array/1,2,3,4,5/;


如果我删除了阵列的内容,他们会如下所示:


array/5/ {
[0] => int/1/
[1] => int/2/
[2] => int/3/
[3] => int/4/
[4] => int/5/
}


当我通过并重置某些键时,索引变得越来越高。


foreach/$array as $i => $info/
{
if/$info == 1 || $info == 2/
{
unset/$array[$i]/;
}
}


随后,如果我现在做了另一个垃圾填埋场,那将是这样的:


array/3/ {
[2] => int/3/
[3] => int/4/
[4] => int/5/
}


是否有一个正确的方法来重置阵列,使其元素再次等于零 ??


array/3/ {
[0] => int/3/
[1] => int/4/
[2] => int/5/
}
已邀请:

诸葛浮云

赞同来自:

试试吧:


$array = array_values/$array/;


使用
http://php.net/manual/en/function.array-values.php

卫东

赞同来自:

还有另一个有趣的方法:


$array = array/'a', 'b', 'c', 'd'/; 
unset/$array[2]/;

$array = array_merge/$array/;


现在钥匙 $array 释放。

风见雨下

赞同来自:

使用
array_splice

反而
unset

:


$array = array/1,2,3,4,5/;
foreach/$array as $i => $info/
{
if/$info == 1 || $info == 2/
{
array_splice/$array, $i, 1/;
}
}

print_r/$array/;


http://ideone.com/liyoh
.

小明明

赞同来自:

只是一个附加。

我知道是什么

老的

, 但我想补充一下,我没有看到我想起自己。 在追捕另一项决定并刚知的时候发现了这个问题 "Well, while I'm here."

首先,答案
https://coderoad.ru/5943149/
在您运行周期后,它很好,但我宁愿立即完成所有工作。 当然,在我的特殊情况下,我必须这样做

更多的

工作而不是这个简单的例子在这里,但该方法仍然适用。 我看到了一些其他人提供的地方
foreach

循环,但它仍然留下你

下班以后

因为野兽的性质。 我通常提供更简单的东西,如
foreach

, 但是,在这种情况下,最好记住旧的好逻辑
for loop

. 刚使用

i


! 为了保持适当的指数,只需减去
i

每次删除阵列元素后。

这是我的简单,

在职的

例子:


$array = array/1,2,3,4,5/;

for /$i = 0; $i < count/$array/; $i++/ {
if/$array[$i] == 1 || $array[$i] == 2/ {
array_splice/$array, $i, 1/;
$i--;
}
}


将输出:


array/3/ {
[0]=> int/3/
[1]=> int/4/
[2]=> int/5/
}


它可以有很多简单的实现。 例如,我的准确案例需要基于多维值存储阵列中的最后一个元素。 我会告诉你我的意思。:


$files = array/
array/
'name' => 'example.zip',
'size' => '100000000',
'type' => 'application/x-zip-compressed',
'url' => '28188b90db990f5c5f75eb960a643b96/example.zip',
'deleteUrl' => 'server/php/?file=example.zip',
'deleteType' => 'DELETE'
/,
array/
'name' => 'example.zip',
'size' => '10726556',
'type' => 'application/x-zip-compressed',
'url' => '28188b90db990f5c5f75eb960a643b96/example.zip',
'deleteUrl' => 'server/php/?file=example.zip',
'deleteType' => 'DELETE'
/,
array/
'name' => 'example.zip',
'size' => '110726556',
'type' => 'application/x-zip-compressed',
'deleteUrl' => 'server/php/?file=example.zip',
'deleteType' => 'DELETE'
/,
array/
'name' => 'example2.zip',
'size' => '12356556',
'type' => 'application/x-zip-compressed',
'url' => '28188b90db990f5c5f75eb960a643b96/example2.zip',
'deleteUrl' => 'server/php/?file=example2.zip',
'deleteType' => 'DELETE'
/
/;

for /$i = 0; $i < count/$files/; $i++/ {
if /$i > 0/ {
if /is_array/$files[$i-1]// {
if /!key_exists/'name', array_diff/$files[$i], $files[$i-1]/// {
if /!key_exists/'url', $files[$i]/ && key_exists/'url', $files[$i-1]// $files[$i]['url'] = $files[$i-1]['url'];
$i--;
array_splice/$files, $i, 1/;
}
}
}
}


将输出:


array/1/ {
[0]=> array/6/ {
["name"]=> string/11/ "example.zip"
["size"]=> string/9/ "110726556"
["type"]=> string/28/ "application/x-zip-compressed"
["deleteUrl"]=> string/28/ "server/php/?file=example.zip"
["deleteType"]=> string/6/ "DELETE"
["url"]=> string/44/ "28188b90db990f5c5f75eb960a643b96/example.zip"
}
[1]=> array/6/ {
["name"]=> string/11/ "example2.zip"
["size"]=> string/9/ "12356556"
["type"]=> string/28/ "application/x-zip-compressed"
["deleteUrl"]=> string/28/ "server/php/?file=example2.zip"
["deleteType"]=> string/6/ "DELETE"
["url"]=> string/45/ "28188b90db990f5c5f75eb960a643b96/example2.zip"
}
}


如你所见,我操纵 $i 在拼接之前,当我努力删除前一个,而不是当前元素时。

詹大官人

赞同来自:

或者您可以创建自己的函数,通过引用传输数组。


function array_unset/$unsets, &$array/ {
foreach /$array as $key => $value/ {
foreach /$unsets as $unset/ {
if /$value == $unset/ {
unset/$array[$key]/;
break;
}
}
}
$array = array_values/$array/;
}


所以你需要做的就是...


$unsets = array/1,2/;
array_unset/$unsets, $array/;


... 而现在是你的
$array

位于没有您投入的值
$unsets

, 并且重置键

知食

赞同来自:

迟到的答案,但之后 PHP 5.3 可能是吧;


$array = array/1, 2, 3, 4, 5/;
$array = array_values/array_filter/$array, function/$v/ {
return !/$v == 1 || $v == 2/;
}//;
print_r/$array/;

石油百科

赞同来自:

100% 适用于我 ! 在删除数组中的元素后,您可以使用它来重新索引数组


$result=array_combine/range/1, count/$your_array//, array_values/$your_array//;

江南孤鹜

赞同来自:

我用
$arr = array_merge/$arr/;

重新定位数组。 只是和可以理解。

小明明

赞同来自:

在我的情况下,我需要使用阵列的值保持唯一的键,因此我刚刚使用了第二个数组:


$arr1 = array/"alpha"=>"bravo","charlie"=>"delta","echo"=>"foxtrot"/;
unset/$arr1/;

$arr2 = array//;
foreach/$arr1 as $key=>$value/ $arr2[$key] = $value;
$arr1 = $arr2
unset/$arr2/;

要回复问题请先登录注册