3

と呼ばれる配列ととexplode()呼ばれる配列を使用して、文字列から 2 つの配列を作成しました。私がやりたいのは、アイテムの数をチェックすることです。アイテムが少ない場合は、数が一致するまで配列の値を繰り返したいと思います。よりも多くのアイテムがある場合は、 のアイテムの数と一致するまで、配列からのアイテムの削除を減らしたいと思います。$labels$colors$labels$colors$colors$colors$labels$colors$labels

count()orを条件付きで使用して、2 つの配列間のアイテムの数を比較できると仮定しarray_legnth()ます。また、何らかの while ループを使用する必要がありますが、開始方法が本当にわかりません。

2 つの配列を比較するために使用する必要があるより良い方法または関数はありますか? そして、2 番目の配列の項目を繰り返したり削除したりして、それぞれに同じ数の項目が表示されるようにするにはどうすればよいでしょうか?

4

3 に答える 3

2

できることは次のとおりです。

// the two arrays
$labels = array('a', 'b', 'c', 'd', 'e');
$colors = array(1, 2, 3, 4);


// only if the two arrays don't hold the same number of elements
if (count($labels) != count($colors)) {
    // handle if $colors is less than $labels
    while (count($colors) < count($labels)) {
        // NOTE : we are using array_values($colors) to make sure we use 
        //        numeric keys. 
        //        See http://php.net/manual/en/function.array-merge.php)
        $colors = array_merge($colors, array_values($colors));
    }

    // handle if $colors has more than $labels
    $colors = array_slice($colors, 0, count($labels));
}

// your resulting arrays    
var_dump($labels, $colors);

それをユーティリティ関数に入れてください。

于 2013-04-21T23:36:53.980 に答える
2

答えが見つからない場合は、次の関数を使用します。

$labels = array("a","b","c","d","e");
$colors = array("green","blue","red");

function fillArray($biggerArray,$smallerArray) {
    $forTimes         = (sizeof($biggerArray)-sizeof($smallerArray));
    $finalArray       = $smallerArray;
    for($i=0;$i < $forTimes ;$i++) {
        shuffle($smallerArray);
        array_push($finalArray,$smallerArray[0]);
    }
    return $finalArray;
}

使用法:

   $newColorsArray = fillArray($labels,$colors);
   print_r($newColorsArray);

戻り値:

Array
(
    [0] => green
    [1] => blue
    [2] => red
    [3] => blue
    [4] => red
)
于 2013-04-21T23:14:51.670 に答える
1

array_walk関数を使用して、いずれかの配列を調べて値を設定できます。

if ( count($labels) > count($colors) ) {
   array_walk($labels, 'fill_other_array');
} else if (count($colors) > count($labels) {
   array_walk($colors, 'fill_other_array');
}

function fill_other_array() {
   ...
   array_fill(...);
}

これは、違いだけでなく配列全体に適用されるため、現時点ではあまり効率的ではありませんが、コードの一部は読者にお任せします。:)

または、短い配列をループするか、配列の最後の値のような単一の値で埋めるという、独自のアイデアのようなことを行うこともできます。

if ( count($labels) > count($colors) ) {
   $colors = array_fill(count($colors), count($labels) - count($colors), $colors[count($colors)-1]);  // fill with last value in the array
} else if (count($colors) > count($labels) {
   ...
}

配列の要素数を減らすには、 array_sliceを使用できます。

于 2013-04-21T23:03:20.437 に答える