Четене и матчване в array

vinsbg

Registered
Здравейте,

имам следния array
Код:
Array
(
    [vaucher] => b2f16c5a3e0692a11b
    [addresses] => Array
        (
            [0] => address_1
            [1] => address_2
            [2] => address_3
        )

    [received] => 2017-01-03T06:49:28.593Z
    [outputs] => Array
        (
            [0] => Array
                (
                    [value] => 1523030
                    [addresses] => Array
                        (
                            [0] => address_1
                        )
                )

            [1] => Array
                (
                    [value] => 23042612
                    [addresses] => Array
                        (
                            [0] => address_2
                        )
                )
        )
)
Това, което искам е да изчета [outputs] и където [addresses] матчне адрес от базата данни да ми покаже това [value] пример:

В базата данни имам address_2 . проверявам всички адреси в [outputs] и където address_2 == address_2 -> echo [value]

Сигурно го обясни малко по-сложно отколкото е ... но ето, какво пробвам, но нещо не работи коректно. Не ми показва правилния [value].

Код:
$match = true;
foreach ($totala['outputs'] as $data) {
	if ($data['addresses'] = $order->address) {
		$match = $data;
		break;
	}
}
if($order['price'] == $match['value'] ) {
	<span class="alert alert-success">Match</span>
}
else {
	<span class="alert alert-info">Not Match</span>
}
В случая имам address_2 в базата и той би трябвало да матчне [0] => address_2 и да ми покаже [value] => 23042612 ( Match ). Аз обаче виждам [value] => 1523030 ( Not Match ).

Защо ми показва първия валуе въпреки, че address_2 != address_1?
 
Много масиви в масивите :) . Преди да почнем да се взираме виж дали не си сбъркал тук if ($data['addresses'] = $order->address) не трябва ли да е два пъти равно?
 
teroristd каза:
Много масиви в масивите :) . Преди да почнем да се взираме виж дали не си сбъркал тук if ($data['addresses'] = $order->address) не трябва ли да е два пъти равно?
Да, така е.

Ако го обърна по следния начин
Код:
$match = false;
...
$data['addresses'] == $order->address
ми дава match = NULL винаги..

По начина по, който е в първия ми въпрос винаги взима пък първия [value] без значение, че адресите не са равни.
 
Обясни по-добре защо на тази променлива $match и подаваш булева стойност, а после и даваш стойност от масив? Другото нещо е че ако не греша този иф if($order['price'] == $match['value'] ) трябва да влезне в горния.
 
спрямо примера които си дал, не ти мачва защото addresses ти е масив и сравняваш масив със стойност.

Би трябвало да е $data['addresses'][$i] , където $i ти е индекса на масива и тогава ще можеш реално самото value да вземеш за да сравниш.

Код:
   if ($data['addresses'][0] == $order->address) {
      $match = $data;
      break;
   }

и би трябвало да ти сработи
 
mapka7a каза:
спрямо примера които си дал, не ти мачва защото addresses ти е масив и сравняваш масив със стойност.

Би трябвало да е $data['addresses'][$i] , където $i ти е индекса на масива и тогава ще можеш реално самото value да вземеш за да сравниш.

Код:
   if ($data['addresses'][0] == $order->address) {
      $match = $data;
      break;
   }

и би трябвало да ти сработи
Да, но аз не знам в кой масив ще бъде addresses и няма как да му го подам. Може да е и в [0], а може да и в [1]... [10] и т.н.
 
vinsbg каза:
mapka7a каза:
спрямо примера които си дал, не ти мачва защото addresses ти е масив и сравняваш масив със стойност.

Би трябвало да е $data['addresses'][$i] , където $i ти е индекса на масива и тогава ще можеш реално самото value да вземеш за да сравниш.

Код:
   if ($data['addresses'][0] == $order->address) {
      $match = $data;
      break;
   }

и би трябвало да ти сработи
Да, но аз не знам в кой масив ще бъде addresses и няма как да му го подам. Може да е и в [0], а може да и в [1]... [10] и т.н.

в такъв случай пробвай с array_search функцията - http://php.net/manual/bg/function.array-search.php

ако намери нещо връща key иначе false.

Нещо такова мисля че ще е :
Код:
if(array_search($order->address,$data['addresses']) !== false)
 
Ето така става, копи пейст на мястото на твоя код и си готов :).

Код:
foreach ($totala['outputs'] as $data) {

    foreach ($data as $v) {

        if ($v[0] == $order->address) {

            $match = $data['value'];

            if($order['price'] == $match) {

                 <span class="alert alert-success">Match</span>
            } 
             else {

                 <span class="alert alert-info">Not Match</span>
             }
        }
    }
}
 
teroristd каза:
Ето така става, копи пейст на мястото на твоя код и си готов :).

Код:
...[/quote]
Благодаря. С малко донастройки изглежда работи  :?:
 

Back
Горе