0

PHP 配列を mysql データベースに挿入しようとしていますが、この特定の配列に問題があります。取る関数を作成しようとしています

 array( 0 => array ( 'col1' => 'value', 'col2' => 'value', 'col3' => 'value', 'col4' => value', 'col5' => 'value', 'col6' => array ( 'string' => array ( 'col7' => 'value' , 'col8' => 'value'), ), ), 

    1 => array ( 'col1' => 'value', 'col2' => 'value', 'col3' => 'value', 'col4' => array ( ), 'col5' => 'value', 'col6' => array ( 'string' => array ( ), ),  ),

     2 => array ( 'col1' => 'value', 'col2' => 'value', 'col3' => 'value', 'col4' => array ( ), 'col5' => 'value', 'col6' => array ( 'string' => array ( ), ), ), )

番号付きの各配列を区切り、次のようにフォーマットします。

array( 'col1' => 'value', 'col2' => 'value', 'col3' => 'value', 'col4' => 'value', 'col5' => 'value', ['col6' => 'value','col7' => 'value',] )

array( 'col1' => 'value', 'col2' => 'value', 'col3' => 'value', 'col4' => 'value', 'col5' => 'value', ['col6' => 'value','col7' => 'value',] )

array( 'col1' => 'value', 'col2' => 'value', 'col3' => 'value', 'col4' => 'value', 'col5' => 'value', ['col6' => 'value','col7' => 'value',] )

行数にもよりますが。次の条件に注意してください。

+8 cols is just an example, the range can fluctuate greatly. 
+Cols containing a array must be non existent if it empty, like in [1] and [2], but not [0].
+Any column could contain a empty or full array. if it contains a full array, it needs to be flatten while retaining it's value.
+Some arrays might have greater then 2 nested arrays. (elements)  
+Not all of the arrays have nested arrays, they are already formatted correctly. These arrays can not be affected by the PHP function i'm trying to create.

私が作成したすべての関数が失敗しました。よろしくお願いします。

UPDATEVar_export上記の配列を取得するために、この関数を使用しました。

    function flatten($array, $preserve_keys = false)
{
  if (!$preserve_keys) {
 $array = array_values($array);

  }
  $flattened_array = array();

  foreach ($array as $k => $v) {
   $flattened_array[$k] = $v;
    if (is_array($v)) {

      $flattened_array = array_merge($flattened_array, call_user_func(__FUNCTION__, $v, $preserve_keys));
    } elseif ($preserve_keys) {
      $flattened_array[$k] = $v;
    } else {
      $flattened_array[] = $v;
    }
  }
  return (array)$flattened_array;
}
4

1 に答える 1

0

必要なのは、再帰関数と呼ばれるものです (詳細については、この質問を参照してください: What is a RECURSIVE Function in PHP? )。

また、配列内の各「列」は文字列 (数値ではありません) のようです。

試してみたいことは、配列内の最初の (またはいずれかの) キーが数値かどうかを確認することです。

コードは次のようになります。

public function extractArray($myArray){

    $extractedArray = array(); // create a new array where all the flattened data will go
    $arrayKeys = array_keys($myArray); // grab all the keys from the array
    if (is_numeric($arrayKeys[0])): // if the first key is a number (it's nested)
        $extractedArray = $myArray[0]; // remove one level of the array by grabbing everything from the first element
        extractArray($extractedArray); // run our function again to check if we need to remove another layer
    else:

        $extractedArray = $myArray; // seems like there are no layers that need to be removed
    endif;
    return $extractedArray;
}

編集:

問題の 2 番目の部分 (可能なサブ配列から値を抽出する) の可能な解決策を次に示します。

ここでは、次の手順を実行します。

1) $extractedArray (パート 1 から) の各要素をループし、それがサブ配列かどうかを確認します

2) 配列の場合は、その内容を抽出し、一時変数 (今のところ配列) に配置します。

3) 次に、自分自身を再度 (再帰的に) 呼び出して、新しい一時変数を渡します (サブ配列がなくなるまで)

4) すべての値を抽出し、それらを 1 つの配列にフラット化したら、その配列をループして、それらを文字列 (または他の好きなもの) として格納できます。

更新され たコード コードは次のとおりです。

public function flattenArrayValues($extractedArray){
     $extractedValues = array();
     foreach($extractedArray as $key => $eA):
          if(is_array($eA)): // check whether current element is an array
            reset($eA); // go to the first element of the array and grab it
            $first_key = key($eA); // ...
            $extractedValues[$key] = $eA[$first_key]; // this allows us to preserve the "cols" for each element
            flattenArrayValues($extractedValues); //call ourselves again to check whether there are any sub-arrays
          endif;
     endforeach;
     return $extractedValues; // seems like we extracted all the values and flattened them 
     // if we want we can loop through this new array and build a string out of it etc.
}

これが役に立ったことを願っています

于 2012-12-30T23:23:13.533 に答える