0

hi all, i'm difficult to get values array
condition:
1. if value only one get values
2. if value same then get value with index or key most high
3. if value same and key most high get all

example:

$data = Array(Array
("1" => "12306")
, Array
("0" => "12106")
,Array
("1" => "12770")
,Array
("3" => "12770")
,Array
("3" => "12306")
,Array
("3" => "12770")
);

the result: 

Array
(
[1] => Array
(
[0] => 12106
)

[3] => Array
(
[3] => 12770
)

[4] => Array
(
[3] => 12306
)

[5] => Array
(
[3] => 12770
)

)

please help me :(

4
Contributors
3
Replies
36
Views
3 Years
Discussion Span
Last Post by cmps
1

Your array structure is very odd and your conditions don't make sense. Try again.

0

@cussel try this:

<?php

$data = array(
    array("1" => "12306"),
    array("0" => "12106"),
    array("1" => "12770"),
    array("3" => "12770"),
    array("3" => "12306"),
    array("3" => "12770")
);

$newdata = array();
$result = array();
$i  = 0;


# reduce and reverse the $data array
foreach($data as $key => $value)
{
    $newdata[][current($value)] = key($value);
}

# compare $data with $values
foreach($data as $key => $value)
{
    $matches    = array();
    $currentkey     = key($value);
    $currentvalue   = current($value);

    foreach($newdata as $newkey => $newvalue)
    {
        $thiskey    = key($newvalue);
        $thisvalue  = current($newvalue);

        if(in_array($thiskey, $value) && $thiskey == $currentvalue) $matches[$thisvalue] = $thiskey;
    }

    # get max key from matches
    $maxkey = max(array_keys($matches));

    if($currentkey == $maxkey) $result[$i][$maxkey] = $matches[$maxkey];
    $i++;
}

print_r($result);

It will output your same expected result. Here there is an extended version, a bit messy but which gives a clue of what is going on: http://pastebin.com/1D3ruVya

The output of the pasted link is:

For key #1 in $data[0] with value 12306

KEY VALUE1  VALUE2  COMPARE
#1   12306   12306  =
#0   12106   n/f
#1   12770   n/f
#3   12770   n/f
#3   12306   12306  +
#3   12770   n/f
            Matches: 2 {"1":12306,"3":12306}
            Discarded
--------------------------------------------------------

For key #0 in $data[1] with value 12106

KEY VALUE1  VALUE2  COMPARE
#1   12306   n/f
#0   12106   12106  =
#1   12770   n/f
#3   12770   n/f
#3   12306   n/f
#3   12770   n/f
            Match: 1 {"0":12106}
            Chosen key: #0
--------------------------------------------------------

For key #1 in $data[2] with value 12770

KEY VALUE1  VALUE2  COMPARE
#1   12306   n/f
#0   12106   n/f
#1   12770   12770  =
#3   12770   12770  +
#3   12306   n/f
#3   12770   12770  +
            Matches: 3 {"1":12770,"3":12770}
            Discarded
--------------------------------------------------------

For key #3 in $data[3] with value 12770

KEY VALUE1  VALUE2  COMPARE
#1   12306   n/f
#0   12106   n/f
#1   12770   12770  -
#3   12770   12770  =
#3   12306   n/f
#3   12770   12770  =
            Matches: 3 {"1":12770,"3":12770}
            Chosen key: #3
--------------------------------------------------------

For key #3 in $data[4] with value 12306

KEY VALUE1  VALUE2  COMPARE
#1   12306   12306  -
#0   12106   n/f
#1   12770   n/f
#3   12770   n/f
#3   12306   12306  =
#3   12770   n/f
            Matches: 2 {"1":12306,"3":12306}
            Chosen key: #3
--------------------------------------------------------

For key #3 in $data[5] with value 12770

KEY VALUE1  VALUE2  COMPARE
#1   12306   n/f
#0   12106   n/f
#1   12770   12770  -
#3   12770   12770  =
#3   12306   n/f
#3   12770   12770  =
            Matches: 3 {"1":12770,"3":12770}
            Chosen key: #3
--------------------------------------------------------

RESULT:
Array
(
    [1] => Array
        (
            [0] => 12106
        )

    [3] => Array
        (
            [3] => 12770
        )

    [4] => Array
        (
            [3] => 12306
        )

    [5] => Array
        (
            [3] => 12770
        )

)

Now, consider that your requests are different from the example of result that you pasted. To develop my example script I've considered only the expected output, otherwise it should include also the indexes 0 and 2 which, instead, are discarded by my script. To get everything just change the last IF statement (line 41) with:

$result[$i][$maxkey] = $matches[$maxkey];

Hope it makes sense. Bye!

0

!!!!! How would you know what is the index for a random input. I mean if you have $data[1000][100000] = 4566, will you loop 100000 times untill you find a value ?
Please be more specific in you question!

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.