Вытянуть данные из массива и записать в новый массив. PHP
Есть массив $event - это матчи выбранной лиги, нужно разбить матчи на - состоявщиеся, не состоявшиеся но с датой, не состоявшиеся без даты. Делаю так:
$match_event = [];
foreach ($events as $e) {
if (isset($e['LuUT'])) { // Матч еще не состоялся но есть дата матча
$match_event = ['whait'=> $e,];
}
if (!isset($e['LuUT']) && isset($e['Tr1'])) { // Матч состоялся
$match_event = ['true' => $e,];
}
if (!isset($e['LuUT']) && !isset($e['Tr1'])) { // Матч еще не состоялся нету даты
$match_event = ['false' => $e,];
}
//dd($e);
}
dd($match_event);
Получаю array:1 [▼ "false" => array:3 Это не правильно так как там есть еще и состоявшиеся матчи, нужно еще форичем пройти по $e? Или как правильно вытянуть. Сам массив такого вида:
array:2 [▼
0 => array:35 [▼
0 => array:15 [▼
"T1" => array:1 [▶]
"Tr1" => "0"
"Trh1" => "0"
"T2" => array:1 [▶]
"Tr2" => "5"
"Trh2" => "1"
"IDs" => array:1 [▶]
"Sg" => 1
"Esd" => 20200923230000
"Esid" => 6
"Epr" => 2
"Eps" => "FT"
"Ewt" => 2
"Ern" => 3
"EO" => 8227
]
1 => array:19 [▶]
2 => array:15 [▶]
Ответы (2 шт):
Автор решения: ioszhuk
→ Ссылка
Вы не правильно понимаете логику работы с массивами.
Вот решение:
$match_event = [
'wait' => [], // Матчи еще не состоялись, но есть дата матчей
'true' => [], // Матчи состоялись
'false' => [] // Матчи еще не состоялись и нету даты
];
foreach ($events as $e) {
if (isset($e['LuUT'])) { // Матч еще не состоялись но есть дата матча
$match_event['wait'][] = $e;
}
if (!isset($e['LuUT']) && isset($e['Tr1'])) { // Матч состоялся
$match_event['true'][] = $e;
}
if (!isset($e['LuUT']) && !isset($e['Tr1'])) { // Матч еще не состоялся нету даты
$match_event['false'][] = $e;
}
}
dd($match_event);
Автор решения: Максим Степанов
→ Ссылка
У вас все верно, кроме того, что вы в цикле перебираете не тот уровень массива. Вам нужен этот уровень - $events[0]:
$events = [
0 => [ // вот этот подмассив нам нужно перебирать в цикле!
0 => [
"Trh2" => "1",
"Sg" => 1,
"Tr1" => 234,
"Esd" => 111,
],
1 => [
"Trh2" => "1",
"Sg" => 1,
"Esd" => 222,
],
2 => [
"Trh2" => "1",
"Sg" => 1,
"Esd" => 333,
"LuUT" => 'something'
]
]
];
Далее, как уже ответили, создаете массив пустой для результатов:
/** создаем пустой массив для текущих событий: */
$match_event = ['wait' => [], 'true' => [], 'false' => []];
Дальше перебором исходного заполняем новый, как и у вас в примере, в принципе:
/**
* в цикле обрабатываем исходные данные.
* в исходном массиве данные о матчах находятся здесь: $events[0], как было указано выше в комментарии.
*/
foreach ($events[0] as $event) {
if (isset($event['LuUT'])) {
$match_event['wait'][] = $event;
} else {
$key = isset($event['Tr1']) ? 'true' : 'false';
$match_event[$key][] = $event;
}
}
echo '<pre>'.print_r($match_event, true).'</pre>';