Ermolov
@Ermolov
Начинающий Full Stack разработчик

SOS! Запутался. Как определить, есть ли в многомерном массиве ключ?

Суть вот в чем:
Есть json с таким содержимым:
{
    "25-12-2019": [
        {
            "ip": "192.168.182.202",
            "time": "22:43:19"
        }
    ],
    "26-12-2019": [
        {
            "ip": "192.168.182.202",
            "time": "22:43:19"
        },
        {
            "ip": "5.156.182.202",
            "time": "22:43:19"
        }
    ]
}


Я пытаюсь с помощью php определить две вещи:
1. Есть ли в данных блок с датой. Если нет, то создаю этот блок.
2. Есть блок с датой существует, то записываю в него данные, но перед этим проверяю, нет ли уже таких же ранее записанных, чтобы не было повторяющихся записей именно по значению 'ip' в рамках конкретной даты, время не важно.
Вот что !удалось сочинить:
$json = json_decode(file_get_contents('api/datastat/data.json'), true);
	
	if (!in_array($json[$date],$json) ) {
		
		$json[$date][] = [];
file_put_contents('api/datastat/data.json', json_encode($json));
	} else {
		
		foreach ($json as $rtd => $keyz) {
			
			foreach ($keyz as $rtdt => $keye) {
			
			echo $keye['ip'] . 'fffff';
				if (!in_array($ip, $keye)) {
			
			
			$json[$date][] = [
		 'ip' => $_SERVER['REMOTE_ADDR'],
  'time' => $time,];
					
		} 
		
		else {
			exit;
		}file_put_contents('api/datastat/data.json', json_encode($json));
			if ($i = 1) break;	
		}
			
			
		}
		
	}


Проверка существования даты происходит, но проверки уникальности ip нет, пишет все подряд и с одинаковыми значениями. Помогите пожалуйста.
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Самое простое - изменить структуру данных:
{
    "25-12-2019": {
        "192.168.182.202" : "22:43:19"
    },
    "26-12-2019": {
        "192.168.182.202" : "22:43:19",
        "5.156.182.202" : "22:43:19"
    }
}

Но лучше использовать базу данных, иначе можете нарваться на состояние гонки.
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Как-то совсем всё плохо. Вот это - это как?
if (!in_array($json[$date],$json) ) {
А что если поменять на вменяемое?
if (!isset($json[$date])) {

Дальше, проверяете на массив на наличие значения $ip, а при отсутствии заносите в массив не значение $ip, а $_SERVER['REMOTE_ADDR']. Нелогичненько!
При этом алгоритм пройдётся вообще по всем датам, в каждой будет искать этот IP, и каждый раз (из каждой даты) будет добавлять в конкретную $json[$date] ещё одну запись про IP, то есть плодить и множить записи с одинаковыми IP/временем.

P.S. Весьма неряшливый код, не продуманный, с ошибками, резолюция - переделывать нада.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы