配列要素がすでに存在するかどうかを確認しようとしていますが、そうでない場合は、値が1つだけ設定された配列要素を作成し、 nullにする複雑さが増すということは、配列をもう一度ループすることなく配列をチェックしながら2番目のレベルを無視する必要があることです。これはかなり大きな配列になる可能性があるからです。PHP:配列要素が1つのレベルをスキップしているかどうかを調べる
私の配列は次のようになります。
Array
(
[2016-05-28] => Array
(
[0] => Array
(
[store] => 1
[price] => 12
)
[1] => Array
(
[store] => 7
[price] => 18
)
[2] => Array
(
[store] => 9
[price] =>
)
)
)
私は店の値xを持つ既存の要素があるかどうかを確認しようとしているし、それが存在しない場合、私はそれならば、新しい要素を作成します私はそれを無視して移動します。
この例では、$day
と$store
という変数をハードコードしていますが、これは通常forループで作成され、次にforループ内で以下のスニペットが実行されます。
マイコード:
$day = '2016-05-28';
$store = 8;
if (!$history[$day][][$store]) {
$history[$day][] = array(
"store" => $store
, "price" => null
);
}
問題は要素がif (!$history[$day][][$store]) {
が存在するかどうかをチェックの上で、それはそれがstore
要素をチェックするように$day
要素と$store
要素との間に第二のレベルを無視することが可能ですそれが存在するかどうかを確認するには、ワイルドカードを使用するか、in_array
を使用できますか?
ここには、私が現在使用している完全なコードがあります。
$setPriceHistoryData = $daoObj->getSetPriceHistoryData($set['id']);
$chartDays = date('Y-m-d', strtotime('-30 days'));
$priceHistoryData = array();
$endDay = date('Y-m-d');
while ($chartDays <= $endDay) {
for ($i = 0; $i < count($setPriceData["price_history_store_data"]); $i++) {
for ($j = 0; $j < count($setPriceHistoryData); $j++) {
if ($setPriceData["price_history_store_data"][$i]["id"] == $setPriceHistoryData[$j]["vph_store"]
&& $chartDays == $setPriceHistoryData[$j]["vph_date"]) {
$priceHistoryData[$chartDays][] = array(
"store" => $setPriceHistoryData[$j]["vph_store"]
, "price" => $setPriceHistoryData[$j]["vph_price"]
);
} else {
if (!$priceHistoryData[$chartDays][]["store"]) {
$priceHistoryData[$chartDays][] = array(
"store" => $setPriceHistoryData[$j]["vph_store"]
, "price" => null
);
}
}
}
}
// Increment day
$chartDays = date('Y-m-d', strtotime("+1 day", strtotime($chartDays)));
}
配列をループし、ストア値を1次元配列に取得する必要があります。いくつかのループでこれを行うか、代わりに 'array_column()'を使うことができます。次のようなものがあります: 'print_r(array_column(function($ v){return array_column($ v、" store ");}、$ history)、0));' – Rizier123
パフォーマンスが向上し、あなたの履歴構造を別々に編成する場合は、値の代わりにキーの中にストアIDを入れてください - '' 2016-05-28 "=> [1 => 12,7 => 18,9 => null]、...'。 – trincot
@trincot、完璧な、正しい方向に私を指差し、私が今すぐ必要なすべての作業! – llanato