-1

私はあまり上手な英語を話せません。タイトルがわからないので、私が何をする必要があるかを説明しようとします。

ログパーサーを作成しています。対応する要素を含む3つの動的配列(.logファイルから読み取る)があります:

$personName //array of strings, can contain same name
$itemName   //array of strings, can contain same name
$itemAmount //array of numbers

サンプル配列:

$personName = array("Adam", "Maria", "Adam", "Adam");
$itemName = array("paper", "paper", "pen", "paper");
$itemAmount = array(11, 25, 2, 64);

それらの配列を(人とアイテムで)ソートし、(量で)カウントしたいと思います。印刷する:

Total there are '100' 'paper' and '2' 'pen'.
'Adam' have '75' 'paper' and '2 'pen'.
'Maria' have '25' 'paper'.

これにより、各人が持っている各アイテムの%を取得できます。例:

'Adam' have '75'% of all 'paper' and '100'% of all 'pen'.
'Maria' have '25'% of all 'paper'.

一意の名前の配列があります:

$persons = array_keys (array_flip ($personName));
$items = array_keys (array_flip ($itemName));

foreachとforループのさまざまな組み合わせを試しましたが、解決策を見つけるのに苦労しました。
誰かが私が正しいアプローチをとるのを手伝ってくれる?
(これが基本的すぎる場合は申し訳ありませんが、私は本当に解決策を探しました。プログラミングは非常に新しく、このプロジェクトで3日前に学び始めました)
ありがとう!

4

1 に答える 1

0

このような:

<?php
    $personName = array("Adam", "Maria", "Adam", "Adam", "Mihai");
    $itemName = array("paper", "paper", "pen", "paper", 'pencil');
    $itemAmount = array(11, 25, 2, 64, '18');


    $items = array();
    $persons = array();
    foreach($itemName as $id => $name){
        $items[$name] += $itemAmount[$id]; // we are adding amount for each item to $items array
        $persons[$personName[$id]][$name] += $itemAmount[$id]; // we are adding every item with amount to each persons
    }

    echo "Total there are "; // we are looping in each $items to display totals
    $i = 0;
    foreach($items as $nr => $item){

        echo "'".$item."' '".$nr."'";

        if($i < count($items)-2){ // this is for 'and' or ',' in case of multiple items
            echo ", ";
        } elseif($i < count($items)-1){
            echo " and ";
        }
        $i++;
    }

    echo '<br />';

    foreach($persons as $one => $value ){ // we are looping in each persons to display what they have
        echo "'".$one."' have ";
        $i = 0;
        foreach($value as $val => $number){

            echo "'".$number."' '".$val."'";

            if($i < count($value)-2){ // this is for 'and' or ',' in case of multiple items
                echo ", ";
            } elseif($i < count($value)-1){
                echo " and ";
            }

            $i++;
        }
        echo '.<br />';

    }

    // print_r($items); // will result in all items
    // print_r($persons); // will result in every person with every item

?>

これで、を管理でき%ます。

于 2012-08-25T00:34:46.017 に答える