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

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

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

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

Q&A

解決済

3回答

2081閲覧

(PHP)同じ配列の中で連続していない値を見つける方法が知りたい

arai_a

総合スコア7

PHP

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

0グッド

0クリップ

投稿2017/06/13 10:07

例えば、以下のような配列があるとします。

$array = array('りんご', 'りんご', '梨', '梨', 'りんご',
'バナナ', 'バナナ', '梨', 'ブドウ');

りんごや梨が連続せず、飛び飛びに値が入っているのですが
このような連続していない値がある場合、
その値を出力することは可能でしょうか。

たとえば

「りんご」が連続していません。
「梨」が連続していません。

など。

方法を教えてください。よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/06/13 10:34

なぜ、そのような抽出をしたいのでしょう。普通に考えれば、値でソートすれば、そのような処理は不要になるはずです。
arai_a

2017/06/13 10:53

初心者ですいません。csvで他の項目もあるのですが、連続していない値だけをピックアップできればいいんですが。難しいようであれば、行で配列を組んでソートします。
guest

回答3

0

美しくない別解

php

1<?php 2 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5 6$array = ['りんご', 'りんご', '梨', '梨', 'りんご', 'バナナ', 'バナナ', '梨', 'ブドウ']; 7 8$tmp = []; 9foreach ($array as $i => $val) { 10 if (!isset($array[$i - 1]) || $array[$i - 1] != $val) { 11 $tmp[] = $val; 12 } 13} 14 15$arrcount = array_count_values($tmp); 16$t = []; 17foreach ($arrcount as $k => $v) { 18 if ($v > 1) { 19 $t[] = $k; 20 } 21} 22 23var_dump($t);

投稿2017/06/13 13:04

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

arai_a

2017/06/14 01:17

ありがとうございます。 確かにスマートではなかったですが、、、やりたいことはあってます! いろんなやり方があって、ますます苦手になりそうです^^;
guest

0

ベストアンサー

一つ前の値と比べることと、既に出た値と比べることをすればできますね。

php

1 2$array = array('りんご', 'りんご', '梨', '梨', 'りんご', 'バナナ', 'バナナ', '梨', 'ブドウ'); 3 4$lastItem = ''; 5$already = array(); 6 7foreach( $array as $item ){ 8 if ($lastItem !== $item && in_array($item,$already)){ 9 print "「{$item}」が連続していません。\n"; 10 }else if($lastItem !== $item){ 11 array_push($already,$item); 12 } 13 $lastItem = $item; 14} 15

投稿2017/06/13 11:39

oskbt

総合スコア1895

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

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

arai_a

2017/06/14 01:16

ありがとうございます! まさしくこれがやりたかったことです。 ずっと「連続しない数字を出す」にこだわりすぎていました…
guest

0

いまいち何がやりたいのか分かりませんが
こんな感じ?

PHP

1$array = array('りんご', 'りんご', '梨', '梨', 'りんご', 'バナナ', 'バナナ', '梨', 'ブドウ'); 2$x = array_shift($array); 3$s = array(); 4foreach ($array as $v) { 5 if ($x != $v) { 6 $s[] = $v; 7 } 8 $x = $v; 9} 10var_dump($s);

投稿2017/06/13 10:58

takasima20

総合スコア7458

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問