1

ユーザーの手順を保存した PHP 配列があります。

array(
    'step_1' => 1,
    'step_2' => 1,
    'step_3' => 0,
    'step_4' => 0,
    'step_5' => 0
);

したがって、私のユーザーは step_1 と step_2 を実行しますが、他のステップは実行しません。今、彼が行っていない最初のステップの名前を取得したいのですが、この例では「step_3」です。

しかし、配列が次のように見える場合:

 array(
    'step_1' => 1,
    'step_2' => 1,
    'step_3' => 1,
    'step_4' => 1,
    'step_5' => 0
);

ユーザーがstep_5を実行しないことを知っているよりも、「step_5」を取得したいのですが、たとえば、ページを指定するようにリダイレクトできます。どうすれば入手できますか?

4

3 に答える 3

6

array_search()を使用できます

See In Action

<?php 
$array = array(
    'step_1' => 1,
    'step_2' => 1,
    'step_3' => 1,
    'step_4' => 0,
    'step_5' => 0
);

$key = array_search(0, $array); // $key = step_4;

echo $key;
?>
于 2012-09-23T20:18:19.643 に答える
0

あなたが試すことができます

$step = array(
    'step_1' => 1,
    'step_2' => 1,
    'step_3' => 0,
    'step_4' => 0,
    'step_5' => 0
);
var_dump(__missing($step));
var_dump($step);

出力

string 'step_3' (length=6)
array
  'step_1' => int 1
  'step_2' => int 1
  'step_3' => int 1
  'step_4' => int 0
  'step_5' => int 0

例 2

$step = array(
    'step_1' => 1,
    'step_2' => 1,
    'step_3' => 1,
    'step_4' => 1,
    'step_5' => 1
);
var_dump(__missing($step));
var_dump($step);

出力

string 'step_1' (length=6)
array
  'step_1' => int 1
  'step_2' => int 0
  'step_3' => int 0
  'step_4' => int 0
  'step_5' => int 0

使用する機能

function __missing(&$array) {
    $left = array_filter($array, function ($var) {
        return ($var == 1) ? false : true;
    });
    if (! empty($left)) {
        $key = key($left);
        $array[$key] = 1;
        return $key;
    } else {
        array_walk($array, function (&$var) {
            return $var = 0;
        });
        $key = key($array);
        $array[$key] = 1;
        return $key;
    }
}
于 2012-09-23T20:31:17.780 に答える
0

使用できますreset($array);

http://php.net/manual/en/function.reset.php

Return Values

Returns the value of the first array element, or FALSE if the array is empty.

編集:

使用できますarray_search(0,$array);

これにより、最初に見つかった var のキーが返されます。(step_5) あなたの場合。

于 2012-09-23T20:13:30.037 に答える