Форум программистов, компьютерный форум, киберфорум
PHP: API
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 17.03.2017
Сообщений: 13
1

Получить одно значение массива

17.03.2017, 11:38. Просмотров 1568. Ответов 25
Метки нет (Все метки)


Доброго дня, делаю маленький трекинг отправок для своих нужд, использую API Почты России. Циклом прохожу по всему массиву и получаю значения все нормально, но проблема в том что не могу получить одно значение массива, искал решение в нете, найденные варианты в моей ситуации не работают Вот код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$wsdlurl = 'https://tracking.russianpost.ru/rtm34?wsdl';
$client2 = '';
 
$client2 = new SoapClient($wsdlurl, array('trace' => 1, 'soap_version' => SOAP_1_2));
 
$params3 = array ('OperationHistoryRequest' => array ('Barcode' => $tracknumber, 'MessageType' => '0','Language' => 'RUS'),
                  'AuthorizationHeader' => array ('login'=>'login','password'=>'password'));
 
$result = $client2->getOperationHistory(new SoapParam($params3,'OperationHistoryRequest'));
 
 
foreach ($result->OperationHistoryData->historyRecord as $record) {
    printf(
    "<TR>
    <TD STYLE=\"text-align:left;\">%s</TD>
    <TD STYLE=\"text-align:center;\">%s</TD>
    <TD STYLE=\"text-align:center;\">%s</TD>
    <TD>%s</TD>
    <TD>%s</TD>
    <TD STYLE=\"text-align:center;\">%s</TD>
    <TD STYLE=\"text-align:center;\">%s</TD>
    <TD STYLE=\"text-align:center;\">%s</TD>
    <TD STYLE=\"text-align:center;\">%s</TD>
    <TD>%s</TD>
    </TR>",
    $record->OperationParameters->OperType->Name,
    $record->AddressParameters->OperationAddress->Index,
    $record->AddressParameters->OperationAddress->Description,
    $record->OperationParameters->OperAttr->Name,
    $record->AddressParameters->DestinationAddress->Index,
    $record->AddressParameters->DestinationAddress->Description);
};
}
Как мне например получить значение OperationParameters->OperType->Name и только 1 раз (к примеру первое значение), без повторений?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2017, 11:38
Ответы с готовыми решениями:

Работа с json. Получить значение массива.
Hi All! С PHP работаю совсем недавно (просто пришлось), с JSON вообще первый раз, поэтому такой...

Подскажите, как получить значение массива из функции
Подскажите, как получить значение массива из функции: $arr=array(); arr($arr); print_r...

Получить одно значение из БД .accdb
есть бд аксес. есть таблица. в ней ячейка. в ячейке яйцо. в яйце значение как вытащить это...

Mysqli получить только одно значение
привет! я делаю запрос $query = $conn-&gt;prepare('SELECT * FROM users WHERE id = ?');...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы Fullstack-разработчиков на PHP‌
25
15 / 11 / 6
Регистрация: 30.01.2016
Сообщений: 84
07.04.2017, 15:20 2
Так а где Вы вообще на этой странице https://tracking.russianpost.ru/rtm34?wsdl нашли такие параметры OperationParameters ? я перехожу по вашей ссылке и там такого не нахожу
0
0 / 0 / 0
Регистрация: 17.03.2017
Сообщений: 13
07.04.2017, 16:13  [ТС] 3
С вопросом который задавал выше разобрался, но появилась новая проблема, как организовать поиск конкретного значения по такому массиву? Второй день роюсь я нете предложенные там варианты не работают с таким массивом.
Мне нужно к примеру организовать поиск перебором всех значений и если встречается указанное мной значение выводить к примеру "найдено", есть мысли?
Вот вариант который вроде должен работать но увы
PHP
1
2
3
4
5
6
foreach($result as $key => $value)
{
$name .= in_array('искомое значение',$value);
}
if($name) echo 'найдено!';
else echo 'Нет!';
0
15 / 11 / 6
Регистрация: 30.01.2016
Сообщений: 84
07.04.2017, 16:37 4
Попробуйте так:
PHP
1
2
3
4
5
foreach($Mass2 as $key => $value)
{
if($value= 'ivan') echo 'найдено!';
else echo 'Нет!';
}
Вы ищете значение уже в переменной, а не в массиве, поэтому in_array ничего не находит.

Но если не обязательно перебором делать поиск, то можно просто:
PHP
1
2
3
if (in_array('ivan',$Mass2)) {
    echo 'найдено!';
} else echo 'Нет!';
0
0 / 0 / 0
Регистрация: 17.03.2017
Сообщений: 13
07.04.2017, 20:22  [ТС] 5
Не выходит, массив содержит stdClass Object и первый вариант всегда выводит "найдено".
0
15 / 11 / 6
Регистрация: 30.01.2016
Сообщений: 84
07.04.2017, 21:03 6
А второй вариант не подходит?
0
0 / 0 / 0
Регистрация: 17.03.2017
Сообщений: 13
08.04.2017, 10:37  [ТС] 7
А второй выдает всегда "Нет!", оба варианта не подходят для данного массива. Полагаю связано все с stdClass Object, надо в эту сторону копать.
0
15 / 11 / 6
Регистрация: 30.01.2016
Сообщений: 84
09.04.2017, 13:22 8
Посмотрите что будет выводить даный код:
PHP
1
2
3
4
5
foreach($Mass2 as $key => $value)
{
$Res .= $value;
}
echo $Res;
И посмотрите результат, есть ли там вобще 'ivan'
0
0 / 0 / 0
Регистрация: 17.03.2017
Сообщений: 13
11.04.2017, 16:27  [ТС] 9
Даже не выводит результат, вот кусок массива объектов если использовать
PHP
1
print_r($Mass2);
Частично обрезал, т.к. очень большой выходит
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
stdClass Object ( 
    [OperationHistoryData] => stdClass Object (
        [historyRecord] => Array (
            [0] => stdClass Object (
                [AddressParameters] => stdClass Object (
                    [DestinationAddress] => stdClass Object (
                        [Index] => 636733 
                        [Description] => Средний Васюган 
                    ) 
                    [OperationAddress] => stdClass Object ( 
                        [Index] => 107140 
                        [Description] => Москва 140 
                    ) 
                    [MailDirect] => stdClass Object (
                        [Id] => 643 
                        [Code2A] => RU 
                        [Code3A] => RUS 
                        [NameRU] => Российская Федерация 
                        [NameEN] => Russian Federation 
                    ) 
                    [CountryOper] => stdClass Object (
                        [Id] => 643 
                        [Code2A] => RU 
                        [Code3A] => RUS 
                        [NameRU] => Российская Федерация 
                        [NameEN] => Russian Federation 
                    ) 
                ) 
                [FinanceParameters] => stdClass Object (
                    [Payment] => 276000 
                    [Value] => 276000 
                    [MassRate] => 47191 
                    [InsrRate] => 11041 
                    [AirRate] => 0 
                    [Rate] => 0 
                    [CustomDuty] => 0 
                ) 
                [ItemParameters] => stdClass Object (
                    [Barcode] => 10714009062644 
                    [ValidRuType] => 
                    [ValidEnType] => 
                    [ComplexItemName] => Посылка с объявл. ценностью и налож. платежом 
                    [MailRank] => stdClass Object (
                        [Id] => 0 
                        [Name] => Без разряда 
                    ) 
                    [PostMark] => stdClass Object (
                        [Id] => 2048 
                        [Name] => Нестандартная 
                    ) 
                    [MailType] => stdClass Object (
                        [Id] => 4 
                        [Name] => Посылка 
                    ) 
                    [MailCtg] => stdClass Object (
                        [Id] => 4 
                        [Name] => С объявленной ценностью и наложенным платежом 
                    ) 
                    [Mass] => 879 
                )
                [OperationParameters] => stdClass Object (
                    [OperType] => stdClass Object (
                        [Id] => 1 
                        [Name] => Прием 
                    ) 
                    [OperAttr] => stdClass Object (
                    [Id] => 1 
                    [Name] => Единичный 
                    )
                    [OperDate] => 2017-04-08T16:02:02.000+03:00 
                ) 
                [UserParameters] => stdClass Object (
                    [SendCtg] => stdClass Object (
                        [Id] => 1 
                        [Name] => Население 
                    ) 
                    [Sndr] => [Rcpn] => МАРЬЕНКИНА Л И 
                ) 
            ) 
            [1] => stdClass Object (
                [AddressParameters] => stdClass Object (
                    [DestinationAddress] => stdClass Object (
                        [Index] => 636733 
                        [Description] => Средний Васюган 
                    ) 
                    [OperationAddress] => stdClass Object (
                        [Index] => 107140 
                        [Description] => Москва 140 
                    ) 
                    [CountryOper] => stdClass Object (
                        [Id] => 643 
                        [Code2A] => RU 
                        [Code3A] => RUS 
                        [NameRU] => Российская Федерация 
                        [NameEN] => Russian Federation 
                    ) 
                ) 
                [FinanceParameters] => stdClass Object (
                    [CustomDuty] => 0 
                ) 
                [ItemParameters] => stdClass Object (
                    [Barcode] => 10714009062644 
                    [ValidRuType] => 
                    [ValidEnType] => 
                    [PostMark] => stdClass Object (
                        [Id] => 0 
                        [Name] => Без отметки 
                    ) 
                ) 
                [OperationParameters] => stdClass Object (
                    [OperType] => stdClass Object (
                        [Id] => 8 
                        [Name] => Обработка 
                    ) 
                    [OperAttr] => stdClass Object (
                        [Id] => 1 
                        [Name] => Покинуло место приёма 
                    ) 
                    [OperDate] => 2017-04-08T18:20:09.000+03:00 
                ) 
                [UserParameters] => stdClass Object (
                    [Sndr] => [Rcpn] => 
                ) 
            )
Как по такому сделать поиск? Пробовал конвертировать в массив без stdClass Object таким способом:
PHP
1
$array = json_decode(json_encode($Mass2), true);
Результата не дало, есть мысли?
0
15 / 11 / 6
Регистрация: 30.01.2016
Сообщений: 84
11.04.2017, 16:35 10
Есть мысли, только домой попаду смогу что-то подсказать, вы мне скажыте по каких значениях вы хотите делать поиск?
0
0 / 0 / 0
Регистрация: 17.03.2017
Сообщений: 13
11.04.2017, 16:42  [ТС] 11
Сейчас конкретно хотелось бы чтоб поиск ввелся по OperationParameters->OperAttr->Name
А вообще хотелось бы понимать как вообще делается поиск в таком массиве.
0
15 / 11 / 6
Регистрация: 30.01.2016
Сообщений: 84
12.04.2017, 18:49 12
Попробуйте так, будет ли какой результат?
PHP
1
2
$mas_new = json_decode($Mass2);
print_r($mas_new);
0
0 / 0 / 0
Регистрация: 17.03.2017
Сообщений: 13
12.04.2017, 19:05  [ТС] 13
Да нет, конвертировать то мне удалось и массив стал обычным многомерным, но все равно предложенные варианты поиска не работают
0
15 / 11 / 6
Регистрация: 30.01.2016
Сообщений: 84
12.04.2017, 19:07 14
Вот что-то набросал, пробуйте:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$items = $Mass2->historyRecord;
$sample_date = "ivan";
$hasNeededDate = false;
 
foreach ($items as $item) {
   if ($item->OperationParameters->OperAttr->Name == $sample_date) {
       $hasNeededDate = true;
       break;
   }
}
 
var_dump($hasNeededDate);
Добавлено через 1 минуту
О, так дайте мне кусок уже конвертированного массива
1
0 / 0 / 0
Регистрация: 17.03.2017
Сообщений: 13
21.04.2017, 17:13  [ТС] 15
Отлично!! Такой вариант работает, но поиск хотел усложнить и столкнулся с проблемой если добавить не одно, а несколько условий поиска например:
Если найден 'ivan', но не найден 'petr', выводить 'найден только 'ivan'
Если найден 'ivan' и найден 'petr' выводить 'найдены оба').
Попробовал через elseif но поиск останавливается после нахождения одного искомого. Сможете помочь?
0
15 / 11 / 6
Регистрация: 30.01.2016
Сообщений: 84
21.04.2017, 17:18 16
Наверное смогу, но лучше дайте кусок кода в виде массива, с масивами мне легче играться))
0
0 / 0 / 0
Регистрация: 17.03.2017
Сообщений: 13
21.04.2017, 19:21  [ТС] 17
Вот результат перекодированного в массив без stdClassObject
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
Array
(
    [OperationHistoryData] => Array
        (
            [historyRecord] => Array
                (
                    [0] => Array
                        (
                            [AddressParameters] => Array
                                (
                                    [DestinationAddress] => Array
                                        (
                                            [Index] => 684200
                                            [Description] => Соболево
                                        )
 
                                    [OperationAddress] => Array
                                        (
                                            [Index] => 107140
                                            [Description] => Москва 140
                                        )
 
                                    [MailDirect] => Array
                                        (
                                            [Id] => 643
                                            [Code2A] => RU
                                            [Code3A] => RUS
                                            [NameRU] => Российская Федерация
                                            [NameEN] => Russian Federation
                                        )
 
                                    [CountryOper] => Array
                                        (
                                            [Id] => 643
                                            [Code2A] => RU
                                            [Code3A] => RUS
                                            [NameRU] => Российская Федерация
                                            [NameEN] => Russian Federation
                                        )
 
                                )
 
                            [FinanceParameters] => Array
                                (
                                    [Payment] => 267000
                                    [Value] => 267000
                                    [MassRate] => 39188
                                    [InsrRate] => 9452
                                    [AirRate] => 0
                                    [Rate] => 0
                                    [CustomDuty] => 0
                                )
 
                            [ItemParameters] => Array
                                (
                                    [Barcode] => 10714009057527
                                    [ValidRuType] => 
                                    [ValidEnType] => 
                                    [ComplexItemName] => Бандероль 1 класса с объявл. ценностью и налож. платежом
                                    [MailRank] => Array
                                        (
                                            [Id] => 0
                                            [Name] => Без разряда
                                        )
 
                                    [PostMark] => Array
                                        (
                                            [Id] => 0
                                            [Name] => Без отметки
                                        )
 
                                    [MailType] => Array
                                        (
                                            [Id] => 16
                                            [Name] => Бандероль 1 класса
                                        )
 
                                    [MailCtg] => Array
                                        (
                                            [Id] => 4
                                            [Name] => С объявленной ценностью и наложенным платежом
                                        )
 
                                    [Mass] => 348
                                )
 
                            [OperationParameters] => Array
                                (
                                    [OperType] => Array
                                        (
                                            [Id] => 1
                                            [Name] => Прием
                                        )
 
                                    [OperAttr] => Array
                                        (
                                            [Id] => 1
                                            [Name] => Единичный
                                        )
 
                                    [OperDate] => 2017-03-25T16:09:49.000+03:00
                                )
 
                            [UserParameters] => Array
                                (
                                    [SendCtg] => Array
                                        (
                                            [Id] => 1
                                            [Name] => Население
                                        )
 
                                    [Sndr] => 
                                    [Rcpn] => БОРИСОВ Б
                                )
 
                        )
 
                    [1] => Array
                        (
                            [AddressParameters] => Array
                                (
                                    [DestinationAddress] => Array
                                        (
                                            [Index] => 684200
                                            [Description] => Соболево
                                        )
 
                                    [OperationAddress] => Array
                                        (
                                            [Index] => 107140
                                            [Description] => Москва 140
                                        )
 
                                    [CountryOper] => Array
                                        (
                                            [Id] => 643
                                            [Code2A] => RU
                                            [Code3A] => RUS
                                            [NameRU] => Российская Федерация
                                            [NameEN] => Russian Federation
                                        )
 
                                )
 
                            [FinanceParameters] => Array
                                (
                                    [CustomDuty] => 0
                                )
 
                            [ItemParameters] => Array
                                (
                                    [Barcode] => 10714009057527
                                    [ValidRuType] => 
                                    [ValidEnType] => 
                                    [PostMark] => Array
                                        (
                                            [Id] => 0
                                            [Name] => Без отметки
                                        )
 
                                )
 
                            [OperationParameters] => Array
                                (
                                    [OperType] => Array
                                        (
                                            [Id] => 8
                                            [Name] => Обработка
                                        )
 
                                    [OperAttr] => Array
                                        (
                                            [Id] => 1
                                            [Name] => Покинуло место приёма
                                        )
 
                                    [OperDate] => 2017-03-25T18:44:26.000+03:00
                                )
 
                            [UserParameters] => Array
                                (
                                    [Sndr] => 
                                    [Rcpn] => 
                                )
 
                        )
 
                    [2] => Array
                        (
                            [AddressParameters] => Array
                                (
                                    [OperationAddress] => Array
                                        (
                                            [Index] => 140978
                                            [Description] => Московский АСЦ Уч. Отправлений 1 Кл.
                                        )
 
                                    [CountryFrom] => Array
                                        (
                                            [Id] => 643
                                            [Code2A] => RU
                                            [Code3A] => RUS
                                            [NameRU] => Российская Федерация
                                            [NameEN] => Russian Federation
                                        )
 
                                    [CountryOper] => Array
                                        (
                                            [Id] => 643
                                            [Code2A] => RU
                                            [Code3A] => RUS
                                            [NameRU] => Российская Федерация
                                            [NameEN] => Russian Federation
                                        )
 
                                )
 
                            [FinanceParameters] => Array
                                (
                                    [Payment] => 0
                                    [Value] => 0
                                    [MassRate] => 0
                                    [InsrRate] => 0
                                    [AirRate] => 0
                                    [Rate] => 0
                                    [CustomDuty] => 0
                                )
 
                            [ItemParameters] => Array
                                (
                                    [Barcode] => 10714009057527
                                    [ValidRuType] => 
                                    [ValidEnType] => 
                                    [ComplexItemName] => Бандероль 1 класса с объявл. ценностью и налож. платежом
                                    [MailType] => Array
                                        (
                                            [Id] => 16
                                            [Name] => Бандероль 1 класса
                                        )
 
                                    [MailCtg] => Array
                                        (
                                            [Id] => 4
                                            [Name] => С объявленной ценностью и наложенным платежом
                                        )
 
                                    [Mass] => 0
                                )
 
                            [OperationParameters] => Array
                                (
                                    [OperType] => Array
                                        (
                                            [Id] => 8
                                            [Name] => Обработка
                                        )
 
                                    [OperAttr] => Array
                                        (
                                            [Id] => 0
                                            [Name] => Сортировка
                                        )
 
                                    [OperDate] => 2017-03-28T08:44:58.000+03:00
                                )
 
                            [UserParameters] => Array
                                (
                                    [SendCtg] => Array
                                        (
                                            [Id] => 0
                                        )
 
                                    [Sndr] => 
                                    [Rcpn] => БОРИСОВ Б
                                )
 
                        )
0
15 / 11 / 6
Регистрация: 30.01.2016
Сообщений: 84
22.04.2017, 20:49 18
А в каком виде вы хотите получать результаты поиска?
0
0 / 0 / 0
Регистрация: 17.03.2017
Сообщений: 13
23.04.2017, 00:21  [ТС] 19
Как я написал выше мне просто поставить условие, если найдено одно значение тогда выводиться то-то, если найдено два значения выводиться другое и все)
0
15 / 11 / 6
Регистрация: 30.01.2016
Сообщений: 84
24.04.2017, 13:47 20
Пробуйте этот код:
В $Mass2 уже должен быть готовый массив без stdClassObject!
PHP
1
2
3
4
5
6
7
8
9
10
$Mass2 = $Mass2['historyRecord'];
$num = count($Mass2);
$arr = array('Ivan', 'Vasia'); //Здесь пишем значения которые хотим найти
for ($i = 0; $i < $numargs; $i++) {
    foreach ($arr as $val) {
        if($Mass2[$i]['OperationParameters']['OperAttr']['Name'] == $val) {
            echo $val' найден!<br/>';
        }
    }
}
Проверьте правильность пути к вашему Name, чтоб поиск был лам где нужно)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2017, 13:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как из JSON строки получить только одно значение?
есть ответ от сервера {&quot;code&quot;:0,&quot;code&quot;:&quot;OK&quot;} я успешно смог это спарсить с помощью JObject.Parse,...

Как в многомерном массиве зная одно значение, получить другое?
Я ищу так строку в массиве переменная строки - $str, потом мне нужно если такая страка найдена...

Как распарсить строку JSON и получить оттуда только одно значение?
Сервер возвращает мне длинную JSON строку. Из нее мне нужно вытащить только ID. Я сделал так: ...

Как с массива чисел получить одно целое
Здравствуйте!Подскажите как с массива чисел получить одно целое? например int n = new int{1,2,3}; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.