2012-09-23 55 views
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,我可以,exapmle將用戶重定向到指定頁面。我怎麼才能得到它?

+0

關聯數組沒有順序。建議使用索引數組 –

+0

@andrewsi,我沒有任何想法:( –

+0

或者你可以遍歷數組中的值 – andrewsi

回答

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; 
?> 
+1

他應該'ksort($ array);'首先,因爲這些鍵可能不是爲了開始(取決於數組的方式)被填充)。 –

+0

謝謝,你真是太棒了!有用! –

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);

這將返回鍵的首次發現變種。 (step_5)在你的情況。

+2

他想要找到第一個缺失的步驟,而不是數組中的第一個元素 – David

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; 
    } 
}