###目的
下の連想配列で、targetDataがすべて空配列か否かを判定したいです。
ただし、UnknownKey1やUnknownKey2のキー名は不明です。
###連想配列
php
1$datas = array( 2 'UnknownKey1' => array( 3 'color' => 'red', 4 'name' => 'sumith', 5 'targetData' => array() 6 ), 7 'UnknownKey2' => array( 8 'area' => 'tokyo', 9 'targetData' => array() 10 ), 11);
###自分のコード
isAllEmpty();という関数を作りました。しかしもう少しすっきりさせたいと思っています。
php
1<?php 2$datas = array( 3 'UnknownKey1' => array( 4 'color' => 'red', 5 'name' => 'sumith', 6 'targetData' => array() 7 ), 8 'UnknownKey2' => array( 9 'area' => 'tokyo', 10 'targetData' => array() 11 ), 12); 13var_dump(isAllEmpty($datas)); 14function isAllEmpty($datas){ 15 $targetDatas = array(); 16 $isAllEmpty = false; 17 foreach($datas as $k => $data){ 18 $targetDatas[] = $data['targetData']; 19 } 20 $notEmptyDatas = array(); 21 foreach($targetDatas as $targetData){ 22 if(!empty($targetData)){ 23 $notEmptyDatas[] = $targetData; 24 } 25 } 26 return empty($notEmptyDatas) ?? false; 27}
###改善を考えたコード
array_filterを使ったらすっきりできると考えましたが、21行目でエラーになっていまいちわからないでいます。
php
1<?php 2$datas = array( 3 'UnknownKey1' => array( 4 'color' => 'red', 5 'name' => 'sumith', 6 'targetData' => array() 7 ), 8 'UnknownKey2' => array( 9 'area' => 'tokyo', 10 'targetData' => array() 11 ), 12); 13var_dump(isAllEmpty($datas)); 14function isAllEmpty($datas){ 15 $targetDatas = array(); 16 $isAllEmpty = false; 17 foreach($datas as $k => $data){ 18 $targetDatas[] = $data['targetData']; 19 } 20 $notEmptyDatas = array_filter( $targetDatas, org_array_filter($targetDatas) ); // エラー! 21 return empty($notEmptyDatas) ?? false; 22} 23function org_array_filter($array) { 24 $tmp = []; 25 foreach($array as $item) { 26 if( is_array($item) ) { 27 $tmp[] = org_array_filter($item); 28 } else if( ! empty($item) || $item === '0' || $item === 0 ) { 29 $tmp[] = $item; 30 } 31 } 32 return $tmp; 33}
一番すっきり書くのはどういった書き方になりますか?
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/23 01:04