鍍金池/ 問(wèn)答/PHP  網(wǎng)絡(luò)安全/ 多維數(shù)組,新手

多維數(shù)組,新手

求這個(gè)多維數(shù)組中最小的值,輸出空白界面,看半天了也
不知道哪里有問(wèn)題。$nc 是內(nèi)層 nnc內(nèi)內(nèi)層
clipboard.png

<?php
$arr1=array( 5,
            array(3,5,6,7,8),
            array(13,5,6,17,28),
            array(31,5,76,7,38),
            array(33,55,6,7,
                  array(
            1,70,88
        )));
$min=$arr1[0] [0];
$len=count($arr1);
for($i=0;$i<$len;++$i) {
    $len2 = count($arr1[$i]);
    if (is_array($arr1[$i])) {
        for ($nc = 0; $nc < $len2; ++$nc) {
            if ($arr1[$i][$nc] < $min) {
                $min = $arr1[$i][$nc];
            }
            if (is_array($arr1[$i][$nc])) {
                $len3 = count($arr1[$i][$nc]);
                for ($nnc = 0; $nnc < $len3; ++$nnc) {
                    if ($arr1[$i][$nc][$nnc] < $min) {
                        $min = $arr1[$i][$nc][$nnc];
                    }
                }

            }
        }
    }
    elseif($arr1[$i]<$min){
        $min=$arr1[$i];
    }
}
echo $min;
?>
回答
編輯回答
亮瞎她

大概看了你的代碼,局限性比較高。給定的數(shù)組只知道是多位數(shù)組,壓根不知道到底是多少維的。所以你這個(gè)for的數(shù)量就存在局限性。

你這需求可以借助function來(lái)解決。

貼個(gè)代碼,已經(jīng)在里面注釋了。不懂再評(píng)論哈

<?php
$array = [
    5,
    [3,4],
    [5,6],
    [7,8,
        [5,
            [0,
                [-1,2]
            ]
        ]
    ],
    -66,
    [-77,0]
];



function arrayMin($array) {
    //判斷數(shù)組是否是一維數(shù)組,是的話,直接用min函數(shù)取得最小值
    if (count($array) == count($array, 1)) {
        return min($array);
    } else {
        //多位數(shù)組,用foreach循環(huán)數(shù)組
        foreach ($array as $key => $value) {
            if (is_array($value)) {
                //判斷是否為數(shù)組,是的話,重新調(diào)用本函數(shù)(這樣就不用考慮最初給定的$array到底是多少維的了)
                $array[$key] = arrayMin($array[$key]);//直接返回最小值,方便后續(xù)的計(jì)算
            }
        }
        return min($array);//經(jīng)過(guò)上面的循環(huán)計(jì)算,$array已經(jīng)只是個(gè)一維數(shù)組了
    }
}

var_dump(arrayMin($array));
2017年3月7日 03:50
編輯回答
乖乖噠

首先你這種寫法很丑, 而且一旦數(shù)據(jù)結(jié)構(gòu)發(fā)生變化, 你的代碼就不能用了.
其次, 你的寫法有可能會(huì)出現(xiàn)錯(cuò)誤的, 比如$len2 = count($arr1[$i]);這一句

提幾個(gè)建議:

  • 使用foreach代替for
  • 使用官方方法代替自己寫的方法, 比如官方就提供了min方法

以下是我的示例:

/**
 * @param array $array
 * @return Generator
 */
function flatten_array(array $array): Generator {
    foreach ($array as $member) {
        if (is_array($member)) {
            yield from flatten_array($member);
        } else {
            yield $member;
        }
    }
}

/**
 * @param array $numbers
 * @return int
 */
function find_min_number(array $numbers): int {
    return min(...flatten_array($numbers));
}

echo find_min_number(array(5,
    array( 3, 5, 6, 7, 8 ),
    array( 13, 5, 6, 17, 28 ),
    array( 31, 5, 76, 7, 38 ),
    array( 33, 55, 6, 7,
        array( 1, 70, 88 )
    )
));
2017年8月14日 04:26