Просматривая сообщество и Google, я могу видеть проблемы с array_search потерять поиск, итоговое целое число 0, равное строке.array_search возвращает неправильную позицию
Однако в моем случае theres no zero и строгий поиск по-прежнему не помогают.
Массив:
$data= array(
"13" => array(
"start" => array(
0 => "36000",
1 => "43200",
),
"end" => array(
0 => "43200",
1 => "50400",
),
),
"14" => array(
"start" => array(
0 => "36000",
1 => "43200",
),
"end" => array(
0 => "43200",
1 => "50400",
),
),
);
функция:
foreach ($data as &$area) {
foreach ($area['start'] as $key => &$start_time) {
if (($pos = array_search($start_time, $area['end'], true) !== false)) {
$area['end'][$pos] = $area['end'][$key];
unset($area['start'][$key]);
unset($area['end'][$key]);
}
}
}
желаемый результат:
$data= array(
"13" => array(
"start" => array(
0 => "36000",
),
"end" => array(
0 => "50400",
),
),
"14" => array(
"start" => array(
0 => "36000",
),
"end" => array(
0 => "50400",
),
),
);
, что я получаю взамен:
$data= array(
"13" => array(
"start" => array(
0 => "36000",
),
"end" => array(
0 => "43200",
),
),
"14" => array(
"start" => array(
0 => "36000",
),
"end" => array(
0 => "43200",
),
),
);
То, что я намерен достичь с помощью вышеуказанной функции, состоит в том, чтобы объединить последовательные временные интервалы и, как видно, первое совпадающее время начала в конце - это $ data [13] ['start'] [1] = 43200, который совпадает с положением .. ['end'] [0], поэтому я ожидаю, что $ pos вернется также в 0, но возвращаемое значение $ pos равно 1, и обработчик ошибочного элемента будет обработан.
Проблема $ data массив динамический и не всегда будет таким. Несмотря на то, что совпадающее значение $ start_time в массиве «end» может быть явно найдено в позиции 0, возвращается значение $ pos. 1.
Были проблемы с этим в течение довольно долгого времени, и я не могу найти ошибку , надеюсь, что кто-то еще это сделает.
Бест,
Alari
вы можете ввести желаемый результат? – David
@Frayne Konok: Что нужно сделать, это проверить, можно ли $ start_time найти в массиве $ area ['end'], если нет, то ничего не делать, но если он его найдет, верните ключ в качестве $ pos для обработки внутри. но поскольку array_search может вернуть 0 позиций для найденного ключа, я должен выполнить строгое сравнение, когда оно не является ложным (whish - это значение возвращаемого значения array_search, когда ничего не найдено. –
@Kr Bm: сделает желаемый результат как редактирование asap –