php 數組問題,求協助

來源:互聯網
上載者:User
關鍵字 php
第一次在segmentfault裡提問,現在遇到一個問題,非常希望能夠得到大家的解答,非常感謝!!!
問題是這樣的,現在有數組兩個$arr1 和 $arr2

$arr1 = (    array('num'=>'500',id=>'a1'),    array('num'=>'300',id=>'a2'),    array('num'=>'200',id=>'a3'));
$arr2 = (    array('num'=>'400',id=>'b1'),    array('num'=>'200',id=>'b2'),    array('num'=>'200',id=>'b3'),    array('num'=>'100',id=>'b4'),    array('num'=>'100',id=>'b5'));

兩個數組的索引值的總和相等,比如都是 1000, 所有的 num值 都是100的倍數,id值唯一,但兩個數組的長度都不固定;如何組合為一個這樣的數組

$arr = (    array(aid=>'a1',bid=>'b1','num'=>'400'), //b1結束    array(aid=>'a1',bid=>'b2','num'=>'100'),//a1的num值剩下的100 放到b2 a1結束    array(aid=>'a2',bid=>'b2','num'=>'100'),//b2 差的100從a2裡取 b2結束    array(aid=>'a2',bid=>'b3','num'=>'100'),//a2 剩下的200 放到b3 a2結束 b3結束    array(aid=>'a3',bid=>'b4','num'=>'100'),//a3 取100 給b4 b4結束    array(aid=>'a2',bid=>'b5','num'=>'100'),//a3 上下的100 給b5 b5結束 a3結束);

請忽視我的小白狀況,幫我看下這個問題,再次感激不盡!

回複內容:

第一次在segmentfault裡提問,現在遇到一個問題,非常希望能夠得到大家的解答,非常感謝!!!
問題是這樣的,現在有數組兩個$arr1 和 $arr2

$arr1 = (    array('num'=>'500',id=>'a1'),    array('num'=>'300',id=>'a2'),    array('num'=>'200',id=>'a3'));
$arr2 = (    array('num'=>'400',id=>'b1'),    array('num'=>'200',id=>'b2'),    array('num'=>'200',id=>'b3'),    array('num'=>'100',id=>'b4'),    array('num'=>'100',id=>'b5'));

兩個數組的索引值的總和相等,比如都是 1000, 所有的 num值 都是100的倍數,id值唯一,但兩個數組的長度都不固定;如何組合為一個這樣的數組

$arr = (    array(aid=>'a1',bid=>'b1','num'=>'400'), //b1結束    array(aid=>'a1',bid=>'b2','num'=>'100'),//a1的num值剩下的100 放到b2 a1結束    array(aid=>'a2',bid=>'b2','num'=>'100'),//b2 差的100從a2裡取 b2結束    array(aid=>'a2',bid=>'b3','num'=>'100'),//a2 剩下的200 放到b3 a2結束 b3結束    array(aid=>'a3',bid=>'b4','num'=>'100'),//a3 取100 給b4 b4結束    array(aid=>'a2',bid=>'b5','num'=>'100'),//a3 上下的100 給b5 b5結束 a3結束);

請忽視我的小白狀況,幫我看下這個問題,再次感激不盡!

這個題目我是這麼考慮的。把arr1和arr2想象成兩組水桶,$arr1裡有3個水桶,分別裝著500, 300, 200的水,$arr2有5個空桶,然後把arr1裡的水倒進arr2裡。

'500', 'id'=>'a1'),    array('num'=>'300', 'id'=>'a2'),    array('num'=>'200', 'id'=>'a3'));$arr2 = array(    array('num'=>'400', 'id'=>'b1'),    array('num'=>'200', 'id'=>'b2'),    array('num'=>'200', 'id'=>'b3'),    array('num'=>'100', 'id'=>'b4'),    array('num'=>'100', 'id'=>'b5'));st($arr1, $arr2);// 從$a往$b的水桶倒水 $a=>$bfunction st($a, $b){    $a_len = count($a);    $b_len = count($b);    $i = 0;   // $a的當前位置    $j = 0;   // $b的當前位置    $result = array();    while( $i<$a_len && $j<$b_len ){        $item_1 = $a[$i];        $item_2 = $b[$j];        $item = array();        $item_1['num'] = intval( $item_1['num'] );        $item_2['num'] = intval( $item_2['num'] );        if( $item_2['num'] > $item_1['num'] ){            // 當前b的水桶比a的大,把a倒完,再從a裡取下一個水桶,因此$i++            // num值為a的水桶裡所有的水            $item = array('aid'=>$item_1['id'], 'bid'=>$item_2['id'], 'num'=>$item_1['num']);            $b[$j]['num'] -= $item_1['num']; // b的水桶還能倒的水            $i++;        }else if( $item_2['num'] < $item_1['num'] ){            // 當前b的水桶小,會溢出來,因此b當前的這個桶就裝滿了。倒滿之後再取一個桶,因此$j++            // num值為b的體積            $item = array('aid'=>$item_1['id'], 'bid'=>$item_2['id'], 'num'=>$item_2['num']);            $a[$i]['num'] -= $item_2['num'];            $j++;        }else{            $item = array('aid'=>$item_1['id'], 'bid'=>$item_2['id'], 'num'=>$item_2['num']);            $i++;            $j++;        }        array_push($result, $item);    }    echo "
";    print_r($result);}

從例子來看數組1可以理解為收入,數組2可以理解為支出,所謂的組合結果類似餘額的變化過程,但是一定要指明基於哪條收入進行支出的又沒意義。所以,組合不出來,這種問題看源碼沒什麼用,還是要看需求,如果你覺得透露需求違反保密協議就不要問了。
硬拼這個結果不是不行,而是沒價值。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.