Удалить из возвращаемого вложенного массива некоторые значения
Мне возвращается ответ из сторонней проги, в виде вложенного массива, и из всего этого вложенного массива нужно убрать определенные ненужные значения, оставив лишь нужные, пример возвращаемого массива такой:
//Controller
public function getDictiEconomic()
{
$economicIsn = 987;
$result = $this->service->getDictiEconomic($economicIsn);
return response()->json([
'economicIsn' => $result,
'code' => 200
]);
}
//Service
public function getDictiEconomic($economicIsn)
{
return $this->oracleBd->getDictiDc($economicIsn);
}
//Oracle procedure
public function getDictiDc($isn)
{
try {
$procedure = $this->pdo->prepare("begin insdyr.web_methods.GetDictiList(:vId, :vCursor); end;");
$procedure->bindParam(":vISN", $isn, PDO::PARAM_INT);
$procedure->bindParam(":vCursor", $cursor, PDO::PARAM_STMT, 10000);
$procedure->execute();
oci_execute($cursor, OCI_DEFAULT);
oci_fetch_all($cursor, $result, 0, -1, OCI_FETCHSTATEMENT_BY_ROW + OCI_ASSOC);
oci_free_cursor($cursor);
} catch (\Exception $e) {
throw new SystemException('procedure params invalid for getDictiEconomic ' . $e->getMessage());
}
return $result;
}
{
"economicIsn": [
{
"ISN": "7675677",
"PARENTISN": "976",
"CODE": "9",
"NUMCODE": null,
"SHORTNAME": "tyrtyrtyrtyrtyrtyrt",
"FULLNAME": "rtyrtyrtyrtyrtyrtyrtyrty",
"TABLENAME": null,
"CONSTNAME": "tryrtyrtyryrtyryrtyrty",
"N_KIDS": null,
"ACTIVE": "N",
"UPDATED": "2017-02-03 17:01:31",
"UPDATEDBY": "1",
"USERCONSTNAME": null,
"REFCLASSISN1": null,
"REFCLASSISN2": null,
"REFCLASSISN3": null
},
Следом за ним такой же массив и их может быть неопределенное кол-во, можно unset, но
не могу понять как из-за вложенности и неизвестного кол-ва.
],
"code": 200
}
И допустим из этого вложенного массива нужно удалить везде "PARENTISN" и "TABLENAME"
Ответы (1 шт):
Автор решения: Yauhen Kib
→ Ссылка
Начиная с Laravel 8 есть хелпер Arr::dot() и Arr::undot()
use Illuminate\Support\Arr;
...
$flattened = \Illuminate\Support\Arr::dot($array);
$except = ['.PARENTISN', '.TABLENAME'];
foreach ($flattened as $key) {
if(in_array($key, $except)) {
unset($flattened[$key]);
}
}
$clearArray = Arr::undot($flattened);