Соответствие двум элементам в массиве в php - PullRequest
0 голосов
/ 03 января 2012

Я провел сегодня день, пытаясь решить этот вопрос:

Как я могу проверить, совпадают ли элементы {from, to} в этом массиве?Другими словами: мне нужно знать, как сопоставить элементы массива в рекурсивной функции.

Пример

Этот массив должен возвращать FALSE, поскольку $ array [4] [0] ['from'] и $ array [4] [0] ['to'] НЕ одинаковы во всех $ array [2] и $ array [3].

Array
(
    [4] => Array
        (
            [0] => Array
                (
                    [from] => 1
                    [to] => 2.0000
                    [price] => 8.0000
                )

            [1] => Array
                (
                    [from] => 2.0000
                    [to] => 4.0000
                    [price] => 6.0000
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [from] => 1
                    [to] => 3.0000
                    [price] => 70.0000
                )

            [1] => Array
                (
                    [from] => 3.0000
                    [to] => 5.0000
                    [price] => 60.0000
                )

            [2] => Array
                (
                    [from] => 5.0000
                    [to] => 9.0000
                    [price] => 50.0000
                )

        )

    [3] => Array
        (
            [0] => Array
                (
                    [from] => 1
                    [to] => 2.0000
                    [price] => 25.0000
                )

            [1] => Array
                (
                    [from] => 2.0000
                    [to] => 4.0000
                    [price] => 20.0000
                )

            [2] => Array
                (
                    [from] => 4.0000
                    [to] => 6.0000
                    [price] => 15.0000
                )

        )

)

Этот массив должен возвращать TRUE, потому что $ array [4] [0] ['from'] и $ array [4] [0] ['to'] одинаковы во всем массиве $[2] и $ array [3].

Array
(
    [4] => Array
        (
            [0] => Array
                (
                    [from] => 1
                    [to] => 3.0000
                    [price] => 7.0000
                )

            [1] => Array
                (
                    [from] => 3.0000
                    [to] => 5.0000
                    [price] => 6.0000
                )

            [2] => Array
                (
                    [from] => 5.0000
                    [to] => 9.0000
                    [price] => 5.0000
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [from] => 1
                    [to] => 3.0000
                    [price] => 70.0000
                )

            [1] => Array
                (
                    [from] => 3.0000
                    [to] => 5.0000
                    [price] => 60.0000
                )

            [2] => Array
                (
                    [from] => 5.0000
                    [to] => 9.0000
                    [price] => 50.0000
                )

        )

    [3] => Array
        (
            [0] => Array
                (
                    [from] => 1
                    [to] => 3.0000
                    [price] => 170.0000
                )

            [1] => Array
                (
                    [from] => 3.0000
                    [to] => 5.0000
                    [price] => 160.0000
                )

            [2] => Array
                (
                    [from] => 5.0000
                    [to] => 9.0000
                    [price] => 150.0000
                )

        )

)

Я бы хотел получить в результате только значение True или False.

Ответы [ 2 ]

2 голосов
/ 03 января 2012

попробуйте это (не проверено, и это определенно не лучший способ сделать это):

$match = true;

foreach ($main_array as $arrays) 
{
    foreach($arrays as $key => $array)
    {
         $from = $array['from'];
         $to = $array['to'];
         foreach($main_array as $tmp_array)
         {          
             if($tmp_array[$key]['from'] != $from || $tmp_array[$key]['to'] != $to) {               
                $match = false;
                break 3;
             }
         }
    }
}

return $match;
1 голос
/ 03 января 2012

Вот мой пример, я проверял.Здесь вы можете сравнить массив массивов по настраиваемым полям и настраиваемым $ глубинам

Основная функция:

function array_compare(array $haystack, array $to = array(), array &$matches = array(), $depth = 1)
{
    $total = 0;
    if ($depth === 1) // We're in right depth, let's check the elements
    {
        foreach ($haystack as $key => $value)
        {
            $match = true;
            foreach ($to as $to_key => $to_value) // Check every key
            {
                if (!isset($value[$to_key]) || $value[$to_key] !== $to_value)
                {
                    $match = false; // If at least one doesn't match - break and block adding to $matches
                    break;
                }               
            }
            if ($match)
            {
                $matches[]  = $value; // OK, match, let's add to matches.
            }
            $total++; // Increase total searched elements
        }
    }
    else // We're not on the right depth level
    {
        foreach ($haystack as $key => $value)
        {
            $total += array_compare($value, $to, $matches, $depth - 1); // let's gather into
        }
    }

    return $total; // return total searched
}

А вот как вы можете использовать это:Значение true должно быть в случае, если count ($ match) === $ total;

Надеюсь, это именно то, что вам нужно;

...