Как дублировать один специальный элемент в массиве

#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  ;
  }
}
  

Надеюсь, это то, что вы хотите.