2016-06-13 6 views
0

私はPHPマニュアルサイト上の配列ソート機能を見つけましたが、それは警告を生成しています。どんなアドバイスがもらえました。 線 "foreachの($キー=> $列として$データ)" の無効な引数がforeachのために供給される()..中:生成なぜこのphp配列のソート関数は警告を生成するのですか?

function fnArrayOrderby(){ 
//function to sort a database type array of rows by the values in one or more column 
//source http://php.net/manual/en/function.array-multisort.php - user notes 
//example of use -> $sorted = fnArrayOrderby($data, 'volume', SORT_DESC, 'edition', SORT_ASC); 

$args = func_get_args(); //Gets an array of the function's argument list (which can vary in length) 
//echo "sorting on ".$args[1]; 
$data = array_shift($args); //Shift an element off the beginning of array 
foreach ($args as $n => $field) { 
    if (is_string($field)) { 
     $tmp = array(); 
     foreach ($data as $key => $row) 
      $tmp[$key] = $row[$field]; 
     $args[$n] = $tmp; 
     } 
} 
$args[] = &$data; 
call_user_func_array('array_multisort', $args); 
return array_pop($args); 
} 

警告が

  • PHPの警告であります
  • PHPの警告: array_multisort():引数#5は、ラインcall_user_func_array( 'array_multisort'、$ argsを)の配列またはソート フラグ...であることが期待される
+4

array_shiftは配列を返しません – tkausl

+2

@tkausl:配列内の値が配列でない限り。 –

+0

いいえ、私はそれを言い換えましょう: 'array_shift'は渡された配列を返しませんが、渡された配列からシフトされた値を返します。この関数は配列を参照して元の配列を変更します。 – tkausl

答えて

0

私は今、それを働かせました。コメント、特に@rivimeyのおかげで、関数そのものに間違いがあったのではなく、呼び出された方法が間違っていた可能性があります。関数が設定されていない配列に適用されたときに警告が生成されていたことが判明しました。たとえば、この関数を使用してデータベースエントリに関連付けられたイメージの配列をソートしますが、イメージがない場合、配列は設定されません。 ここで関数に次の行を追加しました if(!isset($ args [0])){return;}
ありがとうございました!

関連する問題