2

I wrote a code to parse through something, dynamically making an array out of the array keys of one array. This is from a form, so the odd key has a value, and that is somehow the problem.

My code:

//array values are not needed in my code, just junk rather
$array = array('one_a'=>2, 'three_b', 'four_c', 'five_d'=>12);

$number = array();
$letter = array();

foreach($array as $element) {
    $parts = explode("_", $element);
    $number[] = $parts[0];
    $letter[] = $parts[1];
}

print_r($number);

I do not get how this could go wrong, but when the foreach() iterates through the associative array, it reads "2" and "12" as separate array keys! This ruins my $explode code and throws an error, as "2" has no _ in it.

Why does the associative array fail like this? I tried explicitly defining as $element => $value, NOT using $value (to try to ignore it), but it throws even more errors.

1 Answer 1

5

The problem is not, that 2 and 12 are seen as keys, but rather that they are seen as the real values. If you do a print_r($array), you will see:

Array
(
    [one_a] => 2
    [0] => three_b
    [1] => four_c
    [five_d] => 12
)

(three_b and four_c get assigned an automatic incremental array key) So you have to take into account, that the key might by numeric:

<?php
$array = array('one_a'=>2, 'three_b', 'four_c', 'five_d'=>12);

$number = array();
$letter = array();

// get the key separate from the element:
foreach($array as $key => $element) {
    // and now check for the key
    if (is_numeric($key))
        $value = $element;
    else
        $value = $key;

    $parts = explode("_", $value);
    $number[] = $parts[0];
    $letter[] = $parts[1];
}

print_r($number);

This will get you

Array
(
    [0] => one
    [1] => three
    [2] => four
    [3] => five
)
Sign up to request clarification or add additional context in comments.

1 Comment

Ah, this is really weird, I had worked with PHP for awhile but never came across something like this before. I will seek a different method to parse through form elements like that. Accepted when I can.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.