Chcę Key_value z danych JSON, ale nie używaj pętli

        $y = "2018";

        $json = '[
                  {"2017":[{"p":"50","v":"55"}]},
                  {"2018":[{"p":"50","v":"55"}]}
                ]';
        $obj = json_decode($json, true);
        if(array_key_exists($y, $obj)){
            return $json[$y]; 
        } else {
            return array_search($y, $obj);
        }

Zwróć tylko numer 1

0
appdelegate web 5 czerwiec 2018, 13:47

4 odpowiedzi

Najlepsza odpowiedź
    $num = array_walk($json, function($a) use ($i) {
        $y = "2018";
        if(isset($a[$y])){
            return $i;
        }
        $i++;
    });

Powrót 1.

0
amir.shariflou 6 czerwiec 2018, 12:35

Myślę, że to twoja oczekiwana odpowiedź

$y = "2018";
$json = '[
          {"2017":[{"p":"50","v":"55"}]},
          {"2018":[{"p":"50","v":"55"}]}
        ]';
$obj = json_decode($json, true);
return array_column($obj,$y);

Spowoduje to zwrócenie tablicy jak poniżej:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [p] => 50
                    [v] => 55
                )

        )

)
1
Rakesh Sojitra 5 czerwiec 2018, 11:05

Ponieważ twój ciąg JSON jest następujący po zdekodowaniu:

Array
(
    [0] => Array
        (
            [2017] => Array
                (
                    [0] => Array
                        (
                            [p] => 50
                            [v] => 55
                        )    
                )
        )

    [1] => Array
        (
            [2018] => Array
                (
                    [0] => Array
                        (
                            [p] => 50
                            [v] => 55
                        )
                )
        )
)

array_key_exists Wygląda na to, czy podany klucz istnieje w danej tablicy. array_search Wygląda na to, czy podana wartość występuje w danej tablicy.

Funkcje nie są w stanie spojrzeć w wielowymiarową tablicę. Powinieneś pętlę nad tablicą, a następnie wykonać funkcje array_key_exists i / lub array_search.

0
Bas van Dijk 5 czerwiec 2018, 11:00

Ok, więc próbowałem go ukończyć bez użycia pętli, może to być to, co chcesz, a może nie.

$y = "2018";

$json = '[
          {"2017":[{"p":"50","v":"55"}]},
          {"2018":[{"p":"50","v":"55"}]}
        ]';
$obj = json_decode($json, true);

function exists( $key, $value, $y )
{
  global $result;
  if( isset( $key[ $y ] ) )
  {
    $result = $key[ $y ];
  }
}
array_walk( $obj, "exists", $y );
var_dump( $result );

Wynik:

array(1) {
  [0]=>
  array(2) {
    ["p"]=>
    string(2) "50"
    ["v"]=>
    string(2) "55"
 }
}
0
Blinkydamo 5 czerwiec 2018, 11:33