PHP: ilişkilendirilebilir dizinin alın n-inci madde

5 Cevap php

Eğer bir ilişkisel dizi varsa:

Array
(
    [uid] => Marvelous
    [status] => 1
    [set_later] => Array
        (
            [0] => 1
            [1] => 0
        )

    [op] => Submit
    [submit] => Submit
)

Ve sen bunu nasıl yapacağını, 2. öğeye erişmek istiyor? $arr[1] çalışıyor görünmüyor:

foreach ($form_state['values']['set_later'] as $fieldKey => $setLater) {
    if (! $setLater) {
        $valueForAll = $form_state['values'][$fieldKey];
        $_SESSION[SET_NOW_KEY][array_search($valueForAll, $form_state['values'])] = $valueForAll; // this isn't getting the value properly
    }
}

Bu kod üretmek gerekiyordu:

$_SESSION[SET_NOW_KEY]['status'] = 1

Ama bu sadece boş bir girdi üretir.

5 Cevap

Ben biraz karıştı. Sizin kod dizisi için doğru tuşlara sahip görünmüyor. Bir dizide sadece ikinci elemanı kapmak istiyorsanız Ancak, kullanabilirsiniz:

$keys = array_keys($inArray);
$key = $keys[1];
$value = $inArray[$key];

Ancak, bunu yapmak için çalışıyoruz görünen dikkate sonra, böyle bir şey daha iyi çalışabilir:

$ii = 0;
$setLaterArr = $form_state['values']['set_later'];
foreach($form_state['values'] as $key => $value) {
    if($key == 'set_later')
        continue;
    $setLater = $setLaterArr[$ii];
    if(! $setLater) {
        $_SESSION[SET_NOW_KEY][$key] = $value;
    }
    $ii ++;
}

Bu yardımcı olur mu? Bu set_later değeri ayarlı değilse oturum değerini ayarlamak için çalışıyoruz görünüyor. Yukarıdaki kod yapar. Bunun yerine iç dizi yineleme, ancak, bu dış dizi boyunca dolaşır ve iç dizide nerede izlemek için, bir dizin kullanır. Bu, uygun ölçülebilir olmalıdır.

Eğer ilk örnekteki sağlamak dizi daha sonra $ form_state karşılık eğer

$form_state['values']['set_later'][1]

çalışacaktır.

Aksi halde

$i = 0;
foreach ($form_state['values']['set_later'] as $fieldKey => $setLater) {
    if ($i == 1) {
        $valueForAll = $form_state['values'][$fieldKey];
        $_SESSION[SET_NOW_KEY][$fieldKey] = $setLater;
        continue;
    }
    $i++;
}

Burada cevapların her biri bağımsız dizisi oluşur nasıl, ikinci elemanı almak odaklanmış.

Bu sizin durumda.

Array
(
    [uid] => Marvelous
    [status] => 1
    [set_later] => Array
        (
            [0] => 1
            [1] => 0
        )

    [op] => Submit
    [submit] => Submit
)

Sonra $array['status'] aracılığıyla ikinci öğenin değerini alabilirsiniz.

Ayrıca, bu kod

foreach ($form_state['values']['set_later'] as $fieldKey => $setLater) {
    if (! $setLater) {
        $valueForAll = $form_state['values'][$fieldKey];
        $_SESSION[SET_NOW_KEY][array_search($valueForAll, $form_state['values'])] = $valueForAll; // this isn't getting the value properly
    }
}

Ne yapmaya çalışıyorsunuz ne anlamıyorum, açıklamak ister?