-2
<?php
$tiger = array ("orange", "white");
$cat = array ("black", "white", "brown");
$fruit = array ("purple", "red", "green", "brown");
?>

次のようなものを出力する方法:

orange : tiger
white  : tiger + cat
black  : cat
brown  : cat + fruit
purple : fruit
4

2 に答える 2

5

配列のちょっとした楽しみ:

$arrays = compact('tiger', 'cat', 'fruit');
$values = array_unique(call_user_func_array('array_merge_recursive', $arrays));

foreach ($values as $value) {
    $found = array();
    foreach ($arrays as $name => $bag) {
        if (in_array($value, $bag)) {
            $found[] = $name;
        }
    }
    echo "$value: ".implode(", ", $found)."\n";
}

最初の行を変更することで、これを任意の数の配列に簡単に拡張できます。

実際に見てください

于 2013-03-19T16:34:33.130 に答える
2

したがって、さまざまなオブジェクトの色を取得し、色がオブジェクトを反映するように関連付けを切り替えることに興味があるようです。その逆ではありません。

シナリオで機能する1つのアプローチを次に示します。

<?php
// The objects we wish to extract colors for
$subjects = array(
  'tiger' => array ("orange", "white"),
  'cat' => array ("black", "white", "brown"),
  'fruit' => array ("purple", "red", "green", "brown")
);

// The array we will push colors to as keys, and objects to as values
$consolidated = array();

// Iterate over each object
foreach($subjects as $subject => $colors) {
  // Iterate over each color in the object
  foreach($colors as $color) {
    $consolidated[$color][] = $subject;
  }
}

// Print out results.
foreach($consolidated as $subject => $contents) {
  print $subject . ' : ' . implode(' + ', $contents) . "<br />\n";
}

上記の出力:

orange : tiger
white : tiger + cat
black : cat
brown : cat + fruit
purple : fruit
red : fruit
green : fruit
于 2013-03-19T16:34:53.720 に答える