0

これら 2 つの方法 (array_count_values または array_key_exists) のどちらが、メモリ消費、リソース使用、およびコード処理の容易さに関して、より「使いやすい」かを示します。また、パフォーマンスの大幅な上昇や低下が発生する可能性があるほど、その差は大きいでしょうか?

これらのメソッドの使用方法の詳細が必要な場合は、次のように、非常に大きな XML ファイルを解析し、simpleXML を使用して特定の XML 値を (URL を格納するために) 配列に取得します。

$XMLproducts = simplexml_load_file("products.xml");
foreach($XMLproducts->product as $Product) {
if (condition exists) {
$storeArray[] = (string)$Product->store; //potentially several more arrays will have    values stored in them
}}

重複する値が配列に挿入されることはありません。重複する値を防ぐために、array_key_exists または array_count_values メソッドを使用することについて議論しています。array_key_exists が more であることは理解していますが、私の質問は、どれだけリソースに優しいかということです。パフォーマンスが大幅に低下するのに十分ですか?

配列内の値の重複を防ぐだけでなく、各値に含まれる重複値の数を簡単に表示できるため、主に array_count_values メソッドを使用したいと思います。IE で、storeArray に「Ace Hardware」に 3 つのインスタンスがある場合、次のように URL の横に「3」を簡単に表示できます。

// The foreach loop builds the arrays with values from the XML file, like this:
$storeArray2[] = (string)$Product->store;
// Then we later display the filter links like this:
$storeUniques = array_count_values($storeArray)
foreach ($storeUniques as $stores => $amts) {
?>
<a href="webpage.php?Keyword=<?php echo $keyword; ?>&features=<?php echo $Features; ?>&store=<?php echo $stores; ?>"> <?php echo $stores; ?> </a> <?php echo "(" . ($amts) . ")" . "<br>";
}

2 つの方法の間に大きなパフォーマンスのギャップがある場合は、array_key_exists メソッドを使用します。ただし、以下のコードは、重複する値が表示されないようにするだけです。発生した重複値の数 (値ごと) も表示する方法はありますか?

// The foreach loop builds the arrays with values from the XML file, like this:
$Store = (string)$Product->store; 
if (!array_key_exists($Store, $storeArray)) {
$storeArray[$Store] = "<a href='webpage.php?Keyword=".$keyword."&Features=".$features."&store=".$Product->store"'>" . $Store . "</a>";

}

// Then we later display the filter links like this:
foreach ($storeArray as $storeLinks) {
echo $storeLinks . "<br>";
}
4

1 に答える 1

0

isset()を使用してください。array_key_exists よりも 2.5 倍高速です

出典: こちら

于 2014-04-10T12:53:03.500 に答える