Php 在多维数组中取消设置具有特定值的数组?
我正在检查多维数组中的子数组中的某些元素是否不等于某个值,并使用多维数组中的该值取消设置数组。我构建了一个函数,这样我就可以很容易地实现它,但是它似乎不起作用Php 在多维数组中取消设置具有特定值的数组?,php,Php,我正在检查多维数组中的子数组中的某些元素是否不等于某个值,并使用多维数组中的该值取消设置数组。我构建了一个函数,这样我就可以很容易地实现它,但是它似乎不起作用 function multi_unset($array, $unset) { foreach($array as $key=>$value) { $arrayU = $array[$key]; $check = array(); for($i = 0; $i < coun
function multi_unset($array, $unset) {
foreach($array as $key=>$value) {
$arrayU = $array[$key];
$check = array();
for($i = 0; $i < count($unset); $i++) { // produces $array[$key][0, 2, 3]
array_push($check, $arrayU[$unset[$i]]);
}
if(in_array("-", $check)) {
unset($array[$key]);
}
}
return $array;
}
$arr = array(array("-", "test", "test", "test"), array("test", "test", "test", "test"));
$unset = array(0, 2, 3); // keys in individual arrays to check
multi_unset($arr, $unset);
print_r($arr); // Should output without $arr[0]
function multi_unset($array,$unset){
foreach($key=>$value的数组){
$arrayU=$array[$key];
$check=array();
对于($i=0;$i
在本例中,我检查每个子数组中是否有“-”值,并从多数组中取消设置数组。我只检查子数组(0、2、3)中的特定键,但是它输出一个数组,没有任何更改。我想我一定有一些范围错误,并尝试在任何可能的地方使用“global”,但这似乎并没有解决问题。您可能需要阅读PHP中的按引用传递与按值传递。 下面是一些与给定数据集一起工作的代码
// Note the pass by reference.
function multi_unset(&$array, $unset) {
foreach($array as $pos => $subArray) {
foreach($unset as $index) {
$found = ("-" == $subArray[$index]);
if($found){
unset($subArray[$index]);
// Ver 2: remove sub array from main array; comment out previous line, and uncomment next line.
// unset($array[$pos]);
}
$array[$pos] = $subArray; // Ver 2: Comment this line out
}
}
//return $array; // No need to return since the array will be changed since we accepted a reference to it.
}
$arr = array(array("-", "test", "test", "test"), array("test", "test", "test", "test"));
$unset = array(0, 2, 3);
multi_unset($arr, $unset);
print_r($arr);
稍微修改了您的版本并处理了返回值
function multi_unset($array, $unset)
{
$retVal = array();
foreach($array as $key => $value)
{
$remove = false;
foreach($unset as $checkKey)
{
if ($value[$checkKey] == "-")
$remove = true;
}
if (!$remove)
$retVal[] = $value;
}
return $retVal;
}
$arr = array(array("-", "test", "test", "test"), array("test", "test", "test", "test"));
$unset = array(0, 2, 3);
$arr = multi_unset($arr, $unset);
print_r($arr);
您没有通过引用传递数组。。。所以
multi_unset($arr,$unset)
实际上对$arr没有任何作用。或者使用multi_unset(&$arr,$unset)通过引用
或使用返回值$arr=multi\u unset($arr,$unset)
。添加到我之前的评论中:调用时间传递引用实际上在PHP5.3.0中被弃用,在5.4.0中被删除。我认为他实际上想从数组中删除整个子数组,而不仅仅是子数组中的一个键值对。可能是弄错了,给ccKep打个好电话!在这种情况下:if($found){unset($array[$pos]);}
并注释掉if后面的行。在研究代码之后,您基本上创建了一个不等于“-”的新元素数组。对吗?他们不赞成在函数中更改数组。$arr=multi_unset($arr,$unset);是否属于这一类?