0

いくつかの簡単なコード、jsonデータがある場合。私は何かをしたいのですが、最初match stringにjsonデータをチェックし、ある場合はマッチラインの後に値を出力し、そうでない場合はすべてのjsonデータを出力します。

例1、一致文字列は9、jsonデータで一致、一致行7、3の後に値を出力します。

$txt = '[{"a":"5"},{"a":"9"},{"a":"7"},{"a":"3"}]';
$array = json_decode($txt);
$match_string = '9';
foreach ($array as $data){      
    echo $data->a;//7, 3
}

例2、一致する文字列は2であり、jsonデータでは一致せず、すべての値5、9、7、3を出力します。

$txt = '[{"a":"5"},{"a":"9"},{"a":"7"},{"a":"3"}]';
$array = json_decode($txt);
$match_string = '2';
foreach ($array as $data){      
    echo $data->a;//5, 9, 7, 3
}

この判断を行う方法は?foreachのように、一致文字列を無視します。

if($match_string == $data->a){
  continue;//fut this in the foreach ,get 5, 7, 3, but I need 7, 3, next value from 9.
}

ありがとう。

4

4 に答える 4

2

一致するものが見つかったかどうかを示すフラグを設定する必要があります。

$txt = '[{"a":"5"},{"a":"9"},{"a":"7"},{"a":"3"}]';
$array = json_decode($txt);
$match_string = "2";
$found = false;
foreach ($array as $data) {
    if ($found) {
        echo $data->a;
    } else if ($data->a === $match_string) {
        // If we set $found *after* we have the opportunity to display it,
        // we'll have to wait until the next pass.
        $found = true;
    }
}
if (!$found) {
    // Display everything
    foreach ($array as $data) {
        echo $data->a;
    }
}
于 2012-08-22T14:15:07.667 に答える
2

短くするため。

$txt = '[{"a":"5"},{"a":"9"},{"a":"7"},{"a":"3"}]';
$array = json_decode($txt);
$toFind = "9";
$mapped = array_map("current",$array);

if (!in_array($toFind,$mapped))
    echo implode(", ",$mapped);
else
    echo implode(", ",array_slice($mapped,array_search($toFind,$mapped)+1));

その機能ではキーを保持しないことに注意してください
パフォーマンスのために編集

于 2012-08-22T14:34:45.387 に答える
1
$matched = false;
foreach($array as $data){
    if($matched)
        echo $data->a;
    $matched = ($data->a==$matchString) || $matched;
}
if(!$matched)
    foreach($array as $data)
        echo $data->a;

それがあなたの基本的なケースです。

于 2012-08-22T14:13:54.363 に答える
0

$ txtが順序付きリストであり、配列辞書ではない場合、以下のコードは機能するはずです(申し訳ありませんが、私は明らかに幻覚でした)。

<?php
    $txt = '[{"a":"5"},{"a":"9"},{"a":"7"},{"a":"3"}]';
    $array = json_decode($txt);
    $match_string = '9';

    $found = false;
    foreach ($array as $data)
    {
        if ($found) // Line before was lucky
        {
            print $data->a;
            break;
        }
        if ($data->a == $match_string)
            $found = true;
    }
    if (!$found)
    {
        // Output the whole object
    }
?>

それでも、目的の一致が配列の最後のエントリである場合に何が起こるべきかは不明です。行が見つかったが後続がないため、何も出力されないということが起こります。

于 2012-08-22T14:22:35.527 に答える