查找特定值数组多维php


Find specific value array multidimensional php

我是PHP新手,我想在多维数组中找到0并替换为内部数组中缺少的数字。如果内部数组有两个以上的0,它将被忽略并转到下一个。

$list = array("First"=>array(0,1,2,3,0,5,6,7,8,9), 
                "Second"=>array(0,1,2,3,4,5,6,7,8,9), 
                "Third"=>array(0,1,2,3,4,5,0,0,8,9), 
                "Fourth"=>array(0,1,2,3,4,5,6,7,8,0),
                "Fifth"=>array(0,1,2,3,4,5,0,7,8,9),
                "Sixth"=>array(0,0,0,3,4,5,6,0,0,0),
                "Seventh"=>array(0,1,2,3,0,0,6,7,8,9),
                "Eighth"=>array(0,1,2,3,4,5,0,7,8,9),
                "Ninth"=>array(0,1,2,3,4,0,6,7,8,9),
                "Tenth"=>array(0,0,2,3,4,5,6,7,8,9));
$countZero = 0;
    foreach($list as $lvl) {
    foreach($lvl as $ind => $val) {
       if($countZero = array_count_values($lvl[$val] === 0))
        $list[$ind][$val] = 45 - array_sum($ind);
        echo $count;
    }
}

我希望所有内部数组,有两个0,只有一个,所有数字都按顺序排列,即

"First"=>array(0,1,2,3,4,5,6,7,8,9);

请帮帮我。

我尝试了下面的代码,试图找到0。

$counts = 0;
$newArr = array();
    foreach($list as $lvl) {
        if(is_array($lvl)) {
            for($i = 0; $i < count($lvl) - 1;  $i++) {
                  if(($lvl[$i] == 0) < 2){
                    $counts++;
                    $newArr[$i] = 45 - array_sum($lvl);
                 }
                }
            }
        } 
        print_r($newArr);

这是一个使用array_walk:的解决方案

array_walk($list,
           function(&$numbers) {
               $zeroIndex = 0;
               foreach($numbers as $i => $number) {
                   if( $number === 0 ) {
                       if( $zeroIndex > 0 ) {
                           return;
                       }
                       $zeroIndex = $i;
                   }
               }
               $numbers[$zeroIndex] = $zeroIndex;
           });
  • 你不需要数所有的零。你只需要检查是否有少于3个零
  • 我正在保存零($zeroIndex = $i)的索引(位置)
  • 我假设第一个数字总是零($zeroIndex = 0
  • 第二个零的索引大于零。如果我在最后找到的零的索引大于零(if( $zeroIndex > 0 ))时找到一个零,这意味着有两个以上的零

事实上,以下是我所做和工作的内容。

    $list = array(array(1,2,3,0,5,6,7,8,9),
                   array(1,2,3,4,5,6,7,8,9),
                   array(1,2,3,4,5,0,0,8,9),
                   array(1,2,3,4,5,6,7,8,0),
                   array(1,2,3,4,5,0,7,8,9),
                   array(0,0,3,4,5,6,0,0,0),
                   array(1,2,3,0,0,6,7,8,9),
                   array(1,2,3,4,5,0,7,8,9),
                   array(1,2,3,4,0,6,7,8,9));

        for($l = 0; $l < count($list); $l++) 
        {
            $total = 0;
            $countZ = 0;
            for($i=0; $i < 9; $i++)
            {
     if($list[$l][$i] == 0)
                {
                    $countZ++;
                    $indexZero = $i;
                }
                $total += $list[$l][$i];
                if($countZ > 1) {
                    break;
                }
            }
            $list[$l][$indexZero] = 45 - $total;
        }
     print_r($list);    

TY所有人。