您好我需要帮助使用递归函数从数组中删除值
$array = [0] => testing,testing1
[1] => testing,testing1,testing2
[2] => testing,testing1,testing2,testing3
[3] => testing,testing1,testing2,testing3,tesing4
[4] => testing,testing1,testing2,testing3,tesing4
[5] => testing,testing1,testing2,testing3,tesing4
[6] => testing,testing1,testing2,testing3,tesing4
[7] => testing,testing1,testing2,testing3,tesing4
我需要检查数组计数,即if count(array[0]) == count(array[1]),then reutrn array
else unset(array[value]);
从上面的数组我必须删除array[0],[1],[2]
并返回其余的数组值。
我已尝试过以下代码
$idx =10;
$separtor =',';
function array_delete($idx, $array,$separtor) {
$finalvalue = array();
for ($i = 0; $i < $idx; $i++) {
$values = explode($separtor, $array[$i]);
$valuesnext = explode($separtor, $array[$i+1]);
if(count($values) != count($valuesnext) )
{
unset($array[$i]);
// reset($array);
// array_delete($idx, $array,$separtor);
if (is_array($array)) $array = array_delete($idx, $array,$separtor);
$finalvalue = $array;
}else
{
}
//echo $i;
}
return $finalvalue;
//(is_array($array)) ? array_values($array) : null;
//array_delete($idx, $array,$separtor);
}
我正在Notice: Undefined offset: 0 when trying calling recursive, going to infinite loop
答案 0 :(得分:1)
如果我理解正确,您希望过滤数组,使得最终数组中的任何值与源数组中的最后一个元素的长度相同。为了避免在迭代时改变数组,该技术使用符合条件的元素构建一个新数组。
$matchLength = count($mainArray[count($mainArray) - 1]);
$resultArray = array();
for($i = 0; $i < count($mainArray); $i++) {
if(count($mainArray[$i]) == $matchLength) {
$resultArray[] = $mainArray[$i];
}
}
如果您正好使用PHP 5.3或更高版本,则可以使用闭包和array_filter更快地完成此操作:
$matchLength = count($mainArray[count($mainArray) - 1]);
$resultArray = array_filter($mainArray, function($element){return count($element) == $matchLength});
仔细检查代码,我最近没有编写PHP,所以这只是一个想法。
答案 1 :(得分:1)
根据你给出的描述,可以做出(检查当前和前一个的计数,如果它们不匹配,则删除前一个)。
实施例/ Demo:
unset($prevKey);
$count = array();
foreach (array_keys($array) as $key) {
$count[$key] = count($array[$key]);
if (isset($prevKey) && $count[$prevKey] !== $count[$key]) {
unset($array[$prevKey]);
}
$prevKey = $key;
}
如果您需要重新考虑将删除考虑在内,可以使用一点goto来完成工作Demo:
start:
######
unset($prevKey);
$count = array();
foreach (array_keys($array) as $key) {
$count[$key] = count($array[$key]);
if (isset($prevKey) && $count[$prevKey] !== $count[$key]) {
unset($array[$prevKey]);
goto start;
###########
}
$prevKey = $key;
}
答案 2 :(得分:1)
您想保留拥有最多项目的子阵列吗?您的描述似乎是这样说的。
如果是这样,以下内容就足够了。
// Get maximum number of items in the arrays
$max_count = max(array_map('count', $array));
// Keep only those arrays having $max_count items
$filtered = array_filter($array, function ($a) use ($max_count) {
return count($a) === $max_count;
});
除此之外:如果您需要过滤后的数组具有从零开始的密钥,请在其上调用array_values()
。