質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1295閲覧

連想配列の不要なデータを削除しソートする方法について

n2020

総合スコア3

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/10/27 16:40

連想配列より不要なデータを削除し、且つソートする方法についてご質問させて頂きます。
プログラムはかなり初心者な為、適切な書き方がわからず、ご教示いただけますと幸いです。

【質問内容】
変数「$data」に格納した下記の様な配列があり、このデータより
「price」が「sold」のデータを削除し、且つ「price」の値で
昇順に並べ替えを行う方法を模索しています。
利用環境はWordPressになります。

$data = array(
array('id'=>1,'name'=>'aaa','price'=>'5000'),
array('id'=>2,'name'=>'bbb','price'=>'sold'),
array('id'=>3,'name'=>'ccc','price'=>'2000'),
array('id'=>4,'name'=>'ddd','price'=>'sold'),
array('id'=>5,'name'=>'eee','price'=>'1000'),
);

【試した内容】
下記の様に「foreach」にて2回データを処理し、何とか希望するデータの
表示結果を取得する事はできたのですが、この様な方法は問題ありますでしょうか。

より適切な関数や処理方法がございましたら、詳細をご教示頂きたく、
何卒、宜しくお願い申し上げます。


■1回目の処理
「$data」より「price」が「sold」のデータを削除

<?php foreach($data as $key => $value) { $sold_price = $value['price']; if( $sold_price === 'sold' ) unset($data[$key] ); } ?>

■2回目の処理
「$data」を「price」が「sold」のデータで昇順に並べ替え

<?php foreach($data as $key => $value) { $sort_keys[$key] = $value['price']; array_multisort($sort_keys, SORT_ASC, $data); } ?>

以上、宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

本題に入る前に、細かいことで恐縮ですが、質問する時はコードをコードブロックで囲っていただけると見やすくて助かります。
詳しくは以下を参照してください。

質問する際にMarkdownは必ず使って欲しい - Qiita


質問者さんのように2つの処理に分けてforeachする考え方で全く問題ないと思います。

ソートする方の関数がよくわからないことになっていますが……
foreachの中でmultisort()を呼び出すのではなく、foreachでソート用にpriceの値のみの配列$sort_keysを作った後にforeachの外で1回だけmultisort()を呼べばいいのではないでしょうか。

php

1foreach ($data as $key => $value) { 2 $sort_keys[$key] = $value['price']; 3} 4multisort($sort_keys, SORT_ASC, $data);

個人的に配列の操作は(よほど複雑でなければ)foreachよりarray_*()系の関数の方がわかりやすいかなと思っているので、こう書くかなと思いました。

php

1// priceがsoldのものを除く 2$data = array_filter($data, fn($x) => $x['price'] !== 'sold'); 3// priceで昇順に並び替え 4array_multisort(array_column($data, 'price'), SORT_ASC, $data);

投稿2021/10/27 20:34

編集2021/10/27 20:46
fj68

総合スコア752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

n2020

2021/10/27 23:55

fj68様 foreachの外で1回だけmultisort()を呼ぶ方法が適切な処理と理解いたしました。 「array」系の関数は利用したことがないので、今後上手く活用できるよう調べてみます。 迅速なアドバイスありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問