Удалить элемент string из массива

#javascript #php #arrays #json #multidimensional-array

#javascript #php #массивы #json #многомерный-массив

Вопрос:

У меня есть массив, строка и массив имеют одинаковые имена «item», один экземпляр является массивом, а другой — строкой в массиве, я хотел бы удалить всю строку «item» из массива

Массив;

 //JSON



 [{
          "id":"109",
          "text":"dashboard",
          "items":[ //to be ignored
             {
                "id":"1",
                "text":"financial_dashboard",
                "items":"109" //to be deleted
             },
             {
                "id":"108",
                "text":"project_dashboard",
                "items":"109" //to be deleted
             }
          ]
       }]


//Array PHP
(
    [0] => Array
        (
            [id] => 109
            [expanded] =>  true
            [text] => Dashboard
            [items] => Array  //to be ignored
                (
                    [0] => Array
                        (
                            [id] => 1
                            [expanded] =>  true
                            [text] => Financial Dashboard
                            [items] => 109  //to be deleted
                        )

                    [1] => Array
                        (
                            [id] => 108
                            [expanded] =>  true
                            [text] => Project Dashboard
                            [items] => 109  //to be deleted
                        )

                )

        ))
  

Есть предложения?

Комментарии:

1. Это JSON, верно?

2. вы должны знать, как работает массив, этот многомерный массив, который вы можете удалить, удалив: array[0] [0], array [0] [1]

3. for (i = 0; i < arr.length; i ) { for (j = 0; j < arr[i].items.length; j ) {arr[i].items[j].items = undefined}

Ответ №1:

Вы могли бы сделать с двумя вложенными картами следующим образом;

 var arr = [{
      "id":"109",
      "text":"dashboard",
      "items":[ //to be ignored
         {
            "id":"1",
            "text":"financial_dashboard",
            "items":"109" //to be deleted
         },
         {
            "id":"108",
            "text":"project_dashboard",
            "items":"109" //to be deleted
         }
      ]
   }];
   
function delNestedItems(a){
 return a.map(o => (o.items.map(q => (delete q.items,q)),o));
}

console.log(delNestedItems(arr))  

Ответ №2:

вы должны знать, как работает массив, этот многомерный массив, который вы можете удалить, удалив: array[0][0] и array [0][1]

 unset($a[0][0]);
unset($a[0][1]);
  

Ответ №3:

Вы могли бы использовать рекурсивную функцию PHP, подобную этой:

 function removeItems(amp;$arr) {
    if (!is_array($arr)) return;
    if (isset($arr["items"]) amp;amp; is_string($arr["items"])) unset($arr["items"]);
    foreach ($arr as amp;$value ) removeItems($value);
}
  

Назовите это так:

 removeItems($arr);
  

Посмотрите, как он запускается на eval.in .

Вывод:

 Array
(
    [0] => Array
        (
            [id] => 109
            [text] => dashboard
            [items] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [text] => financial_dashboard
                        )

                    [1] => Array
                        (
                            [id] => 108
                            [text] => project_dashboard
                        )

                )

        )

)