Есть массив
$order = [1,2,3];
Это главный массив, по нему нужно сделать проверку порядка другого массива.
И массив в котором нужно проверить порядок
$test = [
0 => [
'id' => 1
],
1 => [
'id' => 3
],
];
Получается нужно узнать, идут ли id
второго массива по порядку первого массива
Если порядок первого массива 1,2,3
, а второго 1,3
- То это правильный порядок
Если порядок первого массива 1,2,3
, а второго 2,3
- То это правильный порядок
Если порядок первого массива 1,2,3
, а второго 1,2,3
- То это правильный порядок
Если порядок первого массива 1,2,3
, а второго 3,2
- То это не правильный порядок
С чего начать?
$check = function($data) use ($order){
foreach($data as $v){
$p = array_search($v, $order);
if($p === false) return false;
$order = array_slice($order, $p);
}
return true;
};
можно как-то так искать, хотя хочется поизящнее (например как-то с array_shift($oder)
). Берете элемент data
, ищите его в order
, если нашлось, обрезаете order
до этой найденной позиции, и идете дальше. А если не нашлось,то не соответствует.
дополнено:
что-то вроде такого (тело предыдущей функции), но что-то я не уверен, что оно работает корректно.
foreach($data as $v){
while( $order && $v != ($o = array_shift($order)));
if( $v !== $o ) return false;
}
return true;
<?php
function f($a, $b) {
$n = 0;
$a_count = count($a);
for ($i = 0, $k = count($b); $i < $k; $i++) {
while($n <= $a_count){
if ($b[$i]['id'] == $a[$n]) {
break;
}else{
if($n == $a_count){
return false;
}
$n++;
}
}
}
return true;
}
$order = [1,2,3];
$test = [
0 => [
'id' => 1
],
1 => [
'id' => 3
],
];
$test2 = [
0 => [
'id' => 3
],
1 => [
'id' => 2
],
];
$test3 = [
0 => [
'id' => 1
],
1 => [
'id' => 2
],
];
$test4 = [
0 => [
'id' => 2
],
1 => [
'id' => 3
],
];
$test5 = [
0 => [
'id' => 3
],
1 => [
'id' => 1
],
];
$test6 = [
0 => [
'id' => 2
],
1 => [
'id' => 1
],
];
echo '1(13)['.f($order, $test).']<br/>'.
'2(32)['.f($order, $test2).']<br/>'.
'3(12)['.f($order, $test3).']<br/>'.
'4(23)['.f($order, $test4).']<br/>'.
'5(31)['.f($order, $test5).']<br/>'.
'6(21)['.f($order, $test6).']<br/>';
Выведет: 1(13)[1] 2(32)[] 3(12)[1] 4(23)[1] 5(31)[] 6(21)[]
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Использую в контроллере форму унаследованную от Symfony\Component\Form\AbstractTypeХочу как-то получить список ошибок валидации
У меня на PHP приходят данные, и я пока не знаю какиеЗадача понять число ли это или нет