2016-07-16 4 views
-1

У меня есть этот многомерный массив с циклом for, который я использую для разбивки определенного числа в функции.array_diff_assoc() значения из многомерного массива()

Однако я также хотел бы использовать array_diff_assoc(), чтобы получить различия.

for ($i1 = 0; $i1 <= 9; $i1++) { 

    $scale_0_to_9[$i1]; 

    foreach($splitInThreeArray as $key=>$value) { 

     if(strlen($value) != '3') { 

      $value = ''; 
      $scale_0_to_9[$key]['9'] = $value; 
      $scale_0_to_9[$key]['8'] = $value; 
      $scale_0_to_9[$key]['7'] = $value; 
      $scale_0_to_9[$key]['6'] = $value; 
      $scale_0_to_9[$key]['5'] = $value; 
      $scale_0_to_9[$key]['4'] = $value; 
      $scale_0_to_9[$key]['3'] = $value; 
      $scale_0_to_9[$key]['2'] = $value; 
      $scale_0_to_9[$key]['1'] = $value; 
      $scale_0_to_9[$key]['0'] = $value; 
     }else { 
      $num_0 = substr_count($value,'0'); 
      $num_1 = substr_count($value,'1'); 
      $num_2 = substr_count($value,'2'); 
      $num_3 = substr_count($value,'3'); 
      $num_4 = substr_count($value,'4'); 
      $num_5 = substr_count($value,'5'); 
      $num_6 = substr_count($value,'6'); 
      $num_7 = substr_count($value,'7'); 
      $num_8 = substr_count($value,'8'); 
      $num_9 = substr_count($value,'9'); 

      $scale_0_to_9[$key]['9'] = $num_9; 
      $scale_0_to_9[$key]['8'] = $num_8; 
      $scale_0_to_9[$key]['7'] = $num_7; 
      $scale_0_to_9[$key]['6'] = $num_6; 
      $scale_0_to_9[$key]['5'] = $num_5; 
      $scale_0_to_9[$key]['4'] = $num_4; 
      $scale_0_to_9[$key]['3'] = $num_3; 
      $scale_0_to_9[$key]['2'] = $num_2; 
      $scale_0_to_9[$key]['1'] = $num_1; 
      $scale_0_to_9[$key]['0'] = $num_0; 
     } 
    } 
} 

У меня есть это, но он не работает.

array_diff_assoc(
    $scale_0_to_9['0'], $scale_0_to_9['1'], 
    $scale_0_to_9['2'], $scale_0_to_9['3'], 
    $scale_0_to_9['4'], $scale_0_to_9['5'] 
) 

Я пытаюсь сравнить массивы внутри $scale_0_to_9 и найти, по крайней мере, 2, которые имеют наибольшее сходство.

Но это не должно быть $scale_0_9['0'] в качестве отправной точки.

Если, например, $scale_0_9['2']! = $scale_0_9['8'] имеют разные значения, которые также будут работать.

Пока они не имеют одинаковых значений.

И мне нужно знать ['2'] $key, потому что мне нужно совместить два разных значения.

+0

Вы должны обеспечить ввод образца и желаемый результат. – goat

+0

Но я не хочу выбирать их отдельно, как этот '$ scale_0_to_9 ['1'] ['5']'. Я хотел бы выделить всю вещь под '$ scale_0_to_9 ['1'] []'. Это возможно? – Borsn

+0

Я замечаю, что вы используете строковые ключи, даже если ключи являются числовыми. например: '$ scale_0_to_9 [$ key] ['9']' Важно ли, чтобы они были строками? Будет ли '$ scale_0_to_9 [$ key] [9]' вместо этого проблемой? – BeetleJuice

ответ

0
call_user_func_array('array_diff_assoc',$scale_0_to_9['1']); 
+0

Или, возможно, 'call_user_func_array ('array_diff_assoc', $ scale_0_to_9);', не уверен, что вы на самом деле пытаетесь сделать. – Wrikken

+0

Я пытаюсь сравнить массивы внутри '$ scale_0_to_9' и найти как минимум 2, которые имеют наименьшее сходство. И затем соедините эти два вместе. – Borsn

0

Сравнение, которое вы хотите, является сложным, и ваши результаты не определены. В ОП Вы заявляете

Я пытаюсь сравнить массивы внутри $ scale_0_to_9 и найти по крайней мере 2, которые имеют наибольшее сходство.

И чуть позже:

Если, например, $ scale_0_9 [ '2'] = $ scale_0_9 [ '8'] имеют различные значения, которые будут работать, как хорошо!. Пока они не имеют одинаковых значений.

В комментариях вы добавить:

идеально было бы иметь совершенно разные значения. Но будет случаи, когда возможно, они разделяют общую ценность, но значение должно присутствовать не более 1 раз в каждые $ scale_0_9 [ «х»]

То, что вы хотите слишком трудно придавить , Тем не менее, я переписал то, что вы разместили, чтобы сделать его намного проще. Все в вашем первом большом блоке кода вокруг if(strlen($value)!='3' может быть урезана до всего лишь несколько строк:

$digits = ['0','1','2','3','4','5','6','7','8','9']; 

if(strlen($value)!==3){ 
    //store in each key, an empty string 
    foreach ($digits as $d){$scale_0_to_9[$key][$d] = '';} 
}else{ 
    foreach ($digits as $d){ 
     //store in each key, the # of times the matching digit 
     //appears in value 
     $scale_0_to_9[$key][$d] = substr_count($value,$d); 
    } 
} 
+0

Thx для более короткой версии ... но это не решает проблему. Так, например, у меня есть номер 231 в [0] => Array ([9] => 0 [8] => 0 [7] => 0 [6] => 0 [5] => 0 [4] = > 0 [3] => 1 [2] => 1 [1] => 1 [0] => 0) ', и у меня есть другие числа, которые будут добавлены одинаково. Теперь из всех этих '[x] => Array()' s я хочу найти два, которые не совпадают (для стартеров). Затем я объединю их и получу набор цифр, которые не повторяются. Это был бы идеальный случай, это исключения ... но мне просто нужна другая точка зрения, как это можно сделать для начала. – Borsn

+0

Будет ли это работать, если я буду вставлять его обратно в sting, а затем добавить его в новый массив, который не является многомерным. И, наконец, запустите array_diff()? – Borsn

+0

@ Borsn Я действительно хотел помочь, но я просто не знаю ответа, потому что я не могу окунуться в то, что вы пытаетесь сделать точно. Я решил опубликовать свой код выше, чтобы помочь вам упростить то, что у вас есть до сих пор, но я не стал искать «diff» по той причине, о которой я только что сказал. – BeetleJuice

Смежные вопросы