我使用简单的php unset()函数来删除和索引数组,但它显示错误
Parse error: syntax error, unexpected 'unset' (T_UNSET)
Run Code Online (Sandbox Code Playgroud)
错误.这是syntex
echo $totalArray = unset($linkExtHelp[0]);
Run Code Online (Sandbox Code Playgroud)
提前致谢.
如何删除数组的元素,然后重新排序,而不在数组中有空元素?
<?php
$c = array( 0=>12,1=>32 );
unset($c[0]); // will distort the array.
?>
Run Code Online (Sandbox Code Playgroud)
答案/解决方案:array array_values(array $ input).
<?php
$c = array( 0=>12,1=>32 );
unset($c[0]);
print_r(array_values($c));
// will print: the array cleared
?>
Run Code Online (Sandbox Code Playgroud) 我创建了一个类似于文件包装器的类.当用户调用delete方法时,我想取消设置对象(实际上是$ this).有办法(解决方法)吗?手册说不,没办法......
我知道:
<action method="unsetChild"><name>as</name></action>
Run Code Online (Sandbox Code Playgroud)
是否可以删除一行中的所有孩子?例如:
<action method="unsetChild"><name>*</name></action>
Run Code Online (Sandbox Code Playgroud)
或类似的东西..?
更新 - 答案:
<action method="unsetChildren"/>
Run Code Online (Sandbox Code Playgroud)
似乎很合理地做了这个伎俩..
是否有更好的形式来做以下其中一种?如果不是,其中一个比另一个快吗?
unset($variable);
Run Code Online (Sandbox Code Playgroud)
或者做
$variable = '';
Run Code Online (Sandbox Code Playgroud) 如何在javascript中取消设置数组?我只是想把它清空 - 所以它里面没有任何关键或任何东西
这是一个简单的编程问题,来自于我对PHP如何在foreach
循环中处理数组复制和取消设置缺乏了解.就像这样,我有一个阵列从我想要改变的外部源格式来找我.一个简单的例子是:
$myData = array('Key1' => array('value1', 'value2'));
Run Code Online (Sandbox Code Playgroud)
但我想要的是:
$myData = array([0] => array('MyKey' => array('Key1' => array('value1', 'value2'))));
Run Code Online (Sandbox Code Playgroud)
所以我采取第一个$myData
并将其格式化为第二个$myData
.我的格式化算法完全没问题.我的问题在于找到一种节省内存的方法,因为这些数组可能会有点笨拙.因此,在我的foreach
循环中,我将当前数组值复制到新格式,然后我从原始数组中取消设置我正在使用的值.例如:
$formattedData = array();
foreach ($myData as $key => $val) {
// do some formatting here, copy to $reformattedVal
$formattedData[] = $reformattedVal;
unset($myData[$key]);
}
Run Code Online (Sandbox Code Playgroud)
这是unset()
一个好主意吗?即,它是否节省了内存,因为我复制了数据并且不再需要原始值?或者,PHP是否自动垃圾收集数据,因为我没有在任何后续代码中引用它?
代码运行正常,到目前为止,我的数据集的大小可以忽略不计,无法测试性能差异.我只是不知道我是否为自己设置了一些奇怪的错误或以后的CPU命中.
感谢您的任何见解.
-sR
如果我想删除数组的最后一个元素,我可以使用以下两个代码之一:
它们之间是否有任何性能或语义差异?
如果没有,哪个更好?
我正在尝试使用if语句取消设置特定值。我的代码是
$fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple'];
for ($i = 0 ; $i < count($fruits); $i++){
if ($fruits[$i] == 'apple' || $fruits[$i] == 'orange' || $fruits[$i] == 'melon' || $fruits[$i] == 'banana'){
unset($fruits[$i]);
}
}
print_r($fruits);
Run Code Online (Sandbox Code Playgroud)
我希望它能回来
Array
(
[4] => pineapple
)
Run Code Online (Sandbox Code Playgroud)
但是结果是
Array
(
[3] => banana
[4] => pineapple
)
Run Code Online (Sandbox Code Playgroud)
为什么不从阵列中设置“香蕉”?
这与PHP 5.3 Cli应用程序有关,该应用程序以复杂的方式处理大量数据,需要数小时才能运行.有人发现关闭垃圾收集使其运行速度更快(可能高达50%).
我遇到的唯一提到这种性能影响的文章是http://derickrethans.nl/collecting-garbage-performance-considerations.html.我不确定我是否完全遵循它,但它似乎表明它只适用于具有大量循环引用的代码.
有人可以对此有所了解吗?
另外,鉴于我们已关闭gc,有没有办法手动减少内存?建议使用unset().快速测试表明,无论对象的大小如何,unset()都会释放80个左右的字节.这表明它只是取消了参考,这是我在网上看到的.我是否正确地认为,当变量超出范围时,即使没有垃圾收集,这些80个字节也会被释放?