0

私は配列を持っているとしましょう

array
   array
     key1 = 'hello im a text'
     key2 = true;
     key3 = '><><';
    array
      array
         key1 = 'hello another text'
         key2 = 'im a text too'
         key3 = false;
         array
            key1 = ')(&#'
    array
    key1 = 'and so on'

上記の配列から以下のようなものを取得するにはどうすればよいですか?

配列 1 => 'こんにちはテキストです'; 2 => 'こんにちは別のテキスト; 3 => '私もテキストです'; 4 => 'など';

これが私がしたことです

$found = array();
function search_text($item, $key)
{
    global $found;
    if (strlen($item) > 5)
    {
        $found[] = $item;
    }
}
array_walk_recursive($array, 'search_text');
var_dump($found);

しかし、どういうわけかうまくいかない

4

2 に答える 2

2

これに似たものを試してください:

function array_simplify($array, $newarray=array()) { //default of $newarray to be empty, so now it is not a required parameter
    foreach ($array as $i) { 
        if (is_array($i)) { //if it is an array, we need to handle differently
            $newarray = array_simplify($i, $newarray); // recursively calls the same function, since the function only appends to $newarray, doesn't reset it
            continue; // goes to the next value in the loop, we know it isn't a string
        }
        if (is_string($i) && strlen($i)>5) { // so we want it in the one dimensional array
            $newarray[] = $i; //append the value to $newarray
        }
    }
    return $newarray; // passes the new array back - thus also updating $newarray after the recursive call
}

私のメモ:私はこれをテストしていません。バグがある場合は、教えてください。修正を試みます。

于 2012-06-07T23:01:38.137 に答える
0

このようなものはうまくいくはずです、

私が使用した条件として

if(is_string($son))

いくつかの結果を得るために、好みに応じて調整できます

$input = <your input array>;
$output = array();

foreach($input AS $object)
{
    search_text($object,$output);
}

var_dump($output);

function search_text($object, &$output)
{
    foreach($object AS $son)
    {
        if(is_object($son))
        {
            search_text($son, $output);
        }
        else
        {
            if(is_string($son))
            {
                $output[] = $son;
            }
        }
    }
}

説明:

search_textは 2 つのパラメータを取得します:$objectと結果の配列$outputです。

オブジェクトであるかどうかを foreach オブジェクトのプロパティでチェックします。

その場合、そのオブジェクト自体をチェックする必要があります。

それ以外search_textの場合は、入力が文字列かどうかをチェックし、文字列の場合は$output配列に格納されます

于 2012-06-07T23:13:03.577 に答える