#php #arrays
#php #массивы
Вопрос:
У меня есть этот массив
array:4 [
0 => array:4 [
"id" => 829
"lat" => "26.5200389"
"lng" => "128.0209283"
"right_angle" => 1
]
1 => array:4 [
"id" => 830
"lat" => "26.5197977"
"lng" => "128.0213830"
"right_angle" => 0
]
2 => array:4 [
"id" => 831
"lat" => "26.5200101"
"lng" => "128.0213830"
"right_angle" => 1
]
3 => array:4 [
"id" => 832
"lat" => "26.5199837"
"lng" => "128.0217600"
"right_angle" => 0
]
]
И я хочу найти элемент have right_angle = 1
и дублировать его в этом массиве.
Этот результат будет
array:6 [
0 => array:4 [
"id" => 829
"lat" => "26.5200389"
"lng" => "128.0209283"
"right_angle" => 1
]
1 => array:4 [
"id" => 829
"lat" => "26.5200389"
"lng" => "128.0209283"
"right_angle" => 1
]
2 => array:4 [
"id" => 830
"lat" => "26.5197977"
"lng" => "128.0213830"
"right_angle" => 0
]
3 => array:4 [
"id" => 831
"lat" => "26.5200101"
"lng" => "128.0213830"
"right_angle" => 1
]
4 => array:4 [
"id" => 831
"lat" => "26.5200101"
"lng" => "128.0213830"
"right_angle" => 1
]
5 => array:4 [
"id" => 832
"lat" => "26.5199837"
"lng" => "128.0217600"
"right_angle" => 0
]
]
Я нашел это
function array_insert_after( array $array, $key, array $new ) {
$keys = array_keys( $array );
$index = array_search( $key, $keys );
$pos = false === $index ? count( $array ) : $index 1;
return array_merge( array_slice( $array, 0, $pos ), $new, array_slice( $array, $pos ) );
}
Но эта функция работает только для одного специального элемента. Если в моем массиве есть 2 специальных элемента. Позиция key
будет неправильной.
Ответ №1:
Простое решение:
foreach ($arrs as $arr) {
if ($arr["right_angle"] === 1) {
$new_arrs[] = $arr;
$new_arrs[] = $arr;
}
else $new_arrs[] = $arr;
}
Вуаля, у $new_arrs
вас будет желаемый результат.
Ответ №2:
рассмотрим, Array arr; пусть int specialKeysCount = 0;
for (int i=0; i < (arr.size() specialKeysCount); i ){
if(arr.get(i).right_angle == 1){
arr.add(arr.get(i), i); //where i will be new position were
object will be repeated
specialKeysCount ;
}
}
Надеюсь, это то, что вы хотите.