一個N維數組,求每一維度元素個數(每一維度每個元素可能是數組或者標量)

來源:互聯網
上載者:User
沒有代碼有思路也可以
例如
$earth = array(

'asia'=>array(    'china'=>array(        'beijing',        'shanghai',        'tianjin',        'hangzhou'    ),    'japan'=>array(        'tokyo',        'hokkaido',        'nagasaki'    )),'europe'=>array(    'france'=>array(        'paris',        'lyon'    ),    'spain'=>array(        'madrid',        'barcelona',        'sevilla'    )),'australia'=>array(    'australia'=>array(        'sydney',        'melbourne'    ))

);
返回 3,5,14

回複內容:

沒有代碼有思路也可以
例如
$earth = array(

'asia'=>array(    'china'=>array(        'beijing',        'shanghai',        'tianjin',        'hangzhou'    ),    'japan'=>array(        'tokyo',        'hokkaido',        'nagasaki'    )),'europe'=>array(    'france'=>array(        'paris',        'lyon'    ),    'spain'=>array(        'madrid',        'barcelona',        'sevilla'    )),'australia'=>array(    'australia'=>array(        'sydney',        'melbourne'    ))

);
返回 3,5,14

我覺得你要做這種統計的話,應該只能用遞迴的方式了

// $array:要統計的數組,$i為第幾維,$count維上層統計function count_array($array,$i=1,$count = array()) {    $n = 0;    if(isset($count[$i])) {        $n = $count[$i];    }    $count[$i] = count($array) + $n;    $i += 1;    foreach($array as $item) {        if(is_array($item)) {            $count = sp_arr($item,$i,$count);        }    }    return $count;}$array = array(    'a' => array(        'b' => 'c',        'd' => 'e',        'f' => 'g',    ),    'h' => array(        'i' => array(            'j' => 'k',            'l' => 'm',            'n' => array(                'o' => 'p',                'q' => 'r'            )        )    ));$count = count_array($array);var_dump($count); // result:/** *array (size=4) *  1 => int 2 *  2 => int 4 *  3 => int 3 *  4 => int 2 */

好吧,我寫個迴圈的(可最佳化,自行最佳化,因為我對PHP不是很熟)
簡單來說是一個廣度優先搜尋(稍微最佳化一下的隊列,如果改成棧就是深度優先)

function count_array($array) {    $count = array();    $level = 0;        $tfifo = $array;        do{    $fifo = $tfifo;    $tfifo = array();    $count[$level] = 0;    foreach($fifo as $item){        $count[$level]++;        if(is_array($item)) {            foreach($item as $subitem){            $tfifo[] = $subitem;        }        }    }    $level++;    }while(count($tfifo)>0);    return $count;}

arr{x}{y}[z]
第三維度元素個數不就是arr{x}{y}.length嗎?
依次類推不就行了?
還是說我對你的問題理解上有錯誤?

用中括弧剛前面的沒出來,,,

$num = array() ;    function get_num($fat,$num){        $num[] = count($fat) ;        $sun = array() ;        foreach ($fat as $key => $value) {            if (is_array($value)) {                foreach ($value as $k => $v) {                    $sun[] = $v ;                }            }        }        if ($sun) {            return get_num($sun,$num) ;        }        return $num ;}// var_dump(get_num($arr,$fat)) ;大神解答,發出來給大家分享一下
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.