PHPについて次のスクリプトを作成してください。


配列に複数の都道府県の名前が入っていたとします。
その中で何番目かはわからないのですが、「東京」という文字があった場合、
その前の要素がすべて削除されるというスクリプトを作成してください。
ただし、各都道府県はダブらないという前提でお願いします。

たとえば、下記のような配列の場合、
$ken = array('北海道', '沖縄', '大阪', '東京', '愛知', '広島', '宮崎', '兵庫') ;
次のようになるということです。
$ken = array('東京', '愛知', '広島', '宮崎', '兵庫') ;

Vista,PHP5,XAMPP,Firefoxという環境でやっています。
以上、よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/11/28 23:40:48
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:GoldenDawn No.1

回答回数426ベストアンサー獲得回数81

ポイント35pt
<?php
function cut_prev($ndl, $list) {
  do if ($list[0] == $ndl) break ;
  while (array_shift($list)) ;
  return $list ;
}

$ken = array('北海道', '沖縄', '大阪', '東京', '愛知', '広島', '宮崎', '兵庫') ;

print_r(cut_prev('東京', $ken)) ;
?>
id:taroemon

ご回答ありがとうございます。

何度もお答えいただいてすみません。

助かりました。

2008/11/28 23:39:48
id:zero-uhura No.2

回答回数14ベストアンサー獲得回数3

ポイント35pt

こんなんでどうでしょうか?

(当方:Mac OS X 10.5.5 PHP 5.2.6)

<?php

// 広島が二つあります。
$kens = array('北海道', '沖縄', '大阪', '東京', '愛知', '広島', '宮崎', '広島', '兵庫') ;

// 東京以前を unset
$is_unset = true;
foreach ($kens as $k => $ken) {
	if ($ken == '東京') $is_unset = false;
	if ($is_unset) unset($kens[$k]);
}

// 重複した値を削除
$kens = array_unique($kens);

// 結果を出力
print_r($kens);

?>

結果

Array
(
    [3] => 東京
    [4] => 愛知
    [5] => 広島
    [6] => 宮崎
    [8] => 兵庫
)
id:taroemon

ご回答ありがとうございます。

質問にはダブらないとしておきましたが、

それに対応していた方がより便利ですね。

ご配慮ありがとうございます。

2008/11/28 23:40:44
  • id:zero-uhura
    zero-uhura 2008/11/28 23:53:52
    GoldenDawn さんの方が効率良いですね(かつ汎用性がある)、結果のkeyもきれいですし、わたしも勉強になりました。
  • id:heppokoA
    こういうのもできるかな,と思います。短く書こうとしてかえって書くのに時間がかかったら損な気もしますが・・・
    「東京」が複数出てきた場合に,最後に出てくる「東京」より前をカットします。

    array_splice($ken,0,array_pop(array_keys($ken,'東京')));
    $ken = array_unique($ken);

    最初の「東京」の前をカット,なら1行目は

    array_splice($ken,0,array_search('東京',$ken));

    とできます。
  • id:taroemon
    zero-uhuraさん
    私の見落としていたところを補っていただきありがとうございます。
    場合にわけで両方を使っていこうと思ってます。

    heppokoAさん
    コメントありがとうございました。
    大変参考になりました。使ってみます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません